SSM+Redis瞎搞

软考系统架构设计师论文涉及知识点之Redis(16) 阅读详情

之前通过SSM+Jedis勉强入门了,这次搞Redis记录一下关键代码!

初学redis觉定自己搞一个Demo先试试整理一下思路,什么不考虑整,不管对错,试试就试试。

理一下思路,总结一句话:去数据库查数据之前先去redis中读一下,如果没有数据就去数据库查,查到数据后存进redis返回数据。

1、redis.properties写一个方便

复制代码
##########################
## redis缓存配置
##########################
# redis主机IP
redis.host=192.168.229.128
# redis端口
redis.port=6379
# 链接超时
# redis.timeout=2000
# 密码
# redis.password=root
# 指定redis数据库
# redis.database=2

##########################
## redis连接池配置
##########################
# 最大连接数
redis.maxTotal=30
# 最大空闲连接数
redis.maxIdle=10
# 获取链接最大等待毫秒
redis.maxWaitMillis=1000
# 获取链接时检查有效性
redis.testOnBorrow=true
复制代码

2、肯定得配xml文件(applicationContext-Redis.xml)

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- redis 数据源 -->
    <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <!-- 定义最大连接数 -->
        <property name="maxTotal" value="${redis.maxTotal}" />
        <!-- 定义最大空闲链接数 -->
        <property name="maxIdle" value="${redis.maxIdle}" />
        <!-- 定义最长等待时间 -->
        <property name="maxWaitMillis" value="${redis.maxWaitMillis}" />
        <!-- 在获取连接时检查是否有效性 -->
        <property name="testOnBorrow" value="${redis.testOnBorrow}" />
    </bean>

    <!-- Spring Data Redis 连接池工厂 -->
    <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
        <!-- redis 主机IP -->
        <property name="hostName" value="${redis.host}" />
        <!-- redis 端口 -->
        <property name="port" value="${redis.port}" />
        <!-- 加载JedisPool配置信息 -->
        <property name="poolConfig" ref="poolConfig" />
    </bean>

    <!-- 配置RedisTemplate API bean -->
    <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
        <!-- Redis hash key: value 序列化 -->
        <property name="hashKeySerializer">
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
        </property>
        <property name="hashValueSerializer">
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
        </property>
        <property name="connectionFactory" ref="jedisConnectionFactory" />
    </bean>

</beans>
复制代码

3、Controller

复制代码
package com.xxw.controller;

import com.xxw.pojo.User;
import com.xxw.service.IUserService;
import com.xxw.util.LoggerAspect;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import javax.annotation.Resource;
import java.util.List;

@Controller
@RequestMapping(value = "/user")
public class UserController {

    private final Logger logger = LoggerFactory.getLogger(LoggerAspect.class);

    @Resource(name = "UserServiceImplement")
    private IUserService userService;

    @RequestMapping(value = "getUserName", method = RequestMethod.GET)
    @ResponseBody
    public Object getUserName(){
        logger.info("查询用户名");
        try{
            return userService.getUserName();
        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }

}
复制代码

4、Service接口

复制代码
package com.xxw.service;

import java.util.List;

public interface IUserService {

    List<String> getUserName() throws Exception;

}
复制代码

5、Service实现

复制代码
package com.xxw.service.impl;

import com.xxw.dao.UserDao;
import com.xxw.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import java.util.List;

@Service(value = "UserServiceImplement")
public class UserServiceImplement implements IUserService {

    @Autowired
    RedisTemplate redisTemplate;
    @Autowired
    UserDao userDao;

    @Override
    public List<String> getUserName() throws Exception {
        String key = "names";  // redis中存储所有用户名的key
        List<String> usernames;    // 存储所有用户名
        // 如果不为空,读取redis中用户名,否则 到数据库取所有用户名存储到redis
        if(redisTemplate.opsForList().size(key) > 0){
            usernames = redisTemplate.opsForList().range(key, 0, -1);
        }else{
            usernames = userDao.findUserNameAll();
            redisTemplate.opsForList().leftPushAll(key, usernames);
        }
        return usernames;
    }

}
复制代码

6、(dao和Mapper文件就不贴了,没卵用)直接测试

  • 首先记录一下redis

  • 第一次运行:http://localhost:8080/jedis/user/getUserName
    • 控制台

    • redis

    • 页面

  • 第二次运行:http://localhost:8080/jedis/user/getUserName
    • 控制台

    • redis同上一样

 

    • 页面

OK不管怎么说算是成功了,先记录到这。大家有兴趣可以加我一起探讨技术,微信:3885115

保姆级教程:在Davinci Configurator里配置BswM的ECU状态机(附状态切换流程图) 本文提供了一份详细的AUTOSAR BswM模块配置指南,通过Davinci Configurator工具实现ECU状态机的构建与管理。内容涵盖从模式请求端口创建到状态切换规则定义的全流程,特别针对Ecu State Handling进行了深入解析,并附有状态切换流程图,帮助汽车电子工程师高效完成ECU状态管理配置。 阅读详情

相关推荐

【软件介绍】GWAS meta分析软件:METAL

Meta-analysis是对多个GWAS分析结果进行综合评价。METAL是GWAS meta分析最常用的工具之一,本文简单介绍METAL软件基本用法。

hucy_Bioinfo 1万+

Java微信公众号支付详细流程

java微信支付详细流程 最近在公司做的两个项目中都用到了微信支付,期间也踩了很多的坑,现在抽空整理了一下,一方面是加深自己的印象,另一方面是希望能够帮助到有疑惑的小伙伴们 一、 获取code String codeUrl = &amp;amp;amp;amp;amp;amp;amp;amp;amp;quot;https://open.weixin.qq.com/connect/oauth2/authorize?&amp;amp;amp;amp;amp;amp

半日橙 2448

Unity开发微信小游戏,使用Addressables管理游戏资源(本地进行远程测试)

快速构建Unity微信小游戏 使用Addressables管理游戏资源 使用小皮助手在本地进行远程资源加载测试

the_vnas的博客 6391

Flink 学习日志 03:自定义一个SourceFunction,完成对Redis中数据的读取

本文介绍了在Flink中自定义SourceFunction读取Redis数据的完整流程:通过Jedis客户端连接WSL2中的Redis服务,编写RedisSource实现循环读取所有Key-value并逐条输出,结合Thread.sleep()实现每秒一条的流式效果。关键步骤包括环境准备、添加Jedis依赖、配置IDEA运行时加载provided依赖,并注意生产环境中应避免使用阻塞的keys *,改用scan命令。最终实现动态读取、实时打印,验证了Flink与Redis的数据集成能力。

木木的学习笔记 423

宋浩线性代数笔记

Miao-A-SongHao-Linear-Algebra-Notes bilibili 宋浩老师 “惊叹号” 系列 《线性代数》网课 笔记及时间点目录 Github项目地址:https://github.com/cy69855522/Miao-A-SongHao-Linear-Algebra-Notes ???? 前言 我发现吧,线代没记笔记真不行。 浩浩学习,天天向上。数学网课推荐????宋浩老师的免...

Knife丶小刀博客 4万+

Jetson Nano系统重装的艺术:从格式化到烧录的深度解析

本文详细解析了Jetson Nano系统重装的完整流程,从SD卡格式化到系统镜像烧录的进阶技巧,包括硬件选择、软件准备、常见问题处理及深度学习环境配置。特别推荐使用三星EVO Plus SD卡和官方电源以确保稳定性,适合开发者快速掌握嵌入式设备系统重装的核心技术。

weixin_28273593的博客 610

Docker多阶段构建实现基于Alpine的Redis的编译安装

【代码】Docker多阶段构建实现基于Alpine的Redis的编译安装。

一直在努力学习的菜鸟 323

【NLG】(六)文本生成评价指标—— ROUGE原理及代码示例

前奏: 【NLG】(一)文本生成评价指标——BLEU原理及代码示例 【NLG】(二)文本生成评价指标—— METEOR原理及代码示例 【NLG】(三)文本生成评价指标—— ENTROPY原理及代码示例 【NLG】(四)文本生成评价指标—— diversity原理及代码示例 【NLG】(五)文本生成评价指标—— kl_divergence原理及代码示例 1.ROUGE原理 2.优缺点 3.如何算ROUGE ...

凝眸伏笔的博客 1万+

Spring Boot 工程通用能力建设:声明式事务定制与 Redis 缓存实践

本文探讨Spring Boot中声明式事务的进阶实践,通过解耦“切点”与“事务属性”,实现灵活控制。核心包括:基于方法名的只读规则(如get*、find*自动设为只读),组合事务属性源确保@Transactional注解优先于命名规则,以及自定义切点实现事务统一织入。该方案提升代码可维护性,避免误写,同时支持特殊场景覆盖,构建更健壮的事务治理体系。

BADAO_LIUMANG_QIZHI的博客 265

GD32F103RCT6/GD32F303RCT6(6.2)USART串口实战:从寄存器配置到DMA高效传输

本文详细介绍了GD32F103RCT6和GD32F303RCT6的USART串口通信实战,从寄存器配置到DMA高效传输的全过程。通过具体的代码示例和优化建议,帮助开发者快速掌握串口通信的关键技术,提升嵌入式开发效率。特别强调了DMA在高速数据传输中的优势和应用技巧。

weixin_33725239的博客 308

LangGraph教程8:LangGraph流式处理

流式处理可显著提升基于LLM应用的响应性。LangGraph支持两种流式模式:values模式返回每一步的完整结果,适合需要完整上下文处理的场景;updates模式仅返回增量变化,适用于实时更新需求。示例代码展示了如何用create_react_agent实现这两种模式,其中values模式完整记录处理流程,updates模式逐步输出结果。通过异步迭代输出流,开发者可以灵活选择适合应用场景的流式处理方式。

Cachel Wood的博客 620

Redis 数据类型全解 - ZSet:两个编码,七种玩法(五)

Redis ZSet 是唯一支持按可变分值有序且成员可快速定位的数据结构,适用于排行榜、延迟队列、滑动窗口限流等场景。其核心价值在于用 score 表达业务语义,但使用不当易引发性能问题:轮询导致 CPU 飙升、全量查询拖垮实例、非原子操作致超发。关键陷阱包括 ZRANGE 0 -1 误用为分值范围、GT/LT 条件逻辑误解、双精度精度上限导致分值冲突。正确使用需掌握原子写入(如 ZADD GT)、避免轮询、合理控制范围,并注意编码类型对复杂度的影响。

IT规划师 523

RK3566-预装APP

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档。

qq_24093081的博客 702

redis

AOF 文件体积更大,恢复慢,因为恢复的时候要逐条重放命令。AOF 还有重写机制,用来消除冗余,比如同一个 key 连续 set a、set b、set c、set d,重写之后就只保留一条 set key d,精简文件。消息会被分发到每一个实例的队列,所有实例监听自己的队列,收到消息之后,各自删除本机 Caffeine 里面对应的本地缓存,实现一处修改、全部实例本地缓存失效。HyperLogLog 不存原始数据,基于概率算法估算独立数量,内存极小,支持海量 UV 统计,缺点是结果有微小误差,拿不到明细。

2401_84390420的博客 170

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

RabbitMQ 消费端幂等:唯一索引、条件更新、Redis 去重三种方案的真实代价

MQ 只承诺至少投递一次,重复消息只能消费端自己吃掉。这篇对比唯一索引、条件更新、Redis 短路三种去重方案在 AI 任务场景下的实际代价,附三个踩过的坑。

zhangpan 209

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Redis Lua 原子限流:Lua 脚本、竞态条件与并发控制

Lua是轻量级可嵌入脚本语言,Redis内置Lua5.1解释器,支持通过EVAL或SCRIPTLOAD执行脚本,实现多命令原子操作。利用redis.call()调用Redis命令,结合KEYS和ARGV传参,可将读取、判断、更新等操作封装为原子逻辑,有效避免限流中的竞态条件。固定窗口限流通过Lua脚本实现计数与过期控制,保证操作连续性。但脚本不可回滚,需避免复杂逻辑;执行时间过长会阻塞Redis,且需满足Cluster哈希槽约束。实际应用中还需考虑故障降级策略。

Joy T的博客 138

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

如何在本地 Docker 容器中运行 Redis,并使用 Redis Insight 和 Redis CLI 进行管理

本文教程介绍了如何使用Docker本地运行Redis服务器与RedisInsight,实现数据的可视化管理。通过RedisInsight和RedisCLI,学习了对哈希、字符串、列表、集合、有序集、流及JSON等数据类型的增删改查(CRUD)操作,涵盖HSET、GET、SADD、XADD等核心命令,帮助开发者高效掌握Redis基本用法。

csdn_aspnet的专栏,请点击博客主页右上角三个点中的私信联系 277

Redis 从 0 到 1(二十七):JSON 体积是 Protobuf 的 3.7 倍?3 种序列化的 Go 基准测试

缓存对象直接用 json.Marshal,1 亿条 key 多花 20G 内存和 3 倍带宽。本文对 JSON / MessagePack / Protobuf 做 Go 基准测试(体积、编解码耗时、CPU),给出不同场景的选型表和统一序列化封装。

2501_92769340的博客 185

Redis 从 0 到 1(二十五):连接池又打满了——PoolSize 公式、泄漏排查与 PoolStats

流量一涨就 connection pool timeout,加 PoolSize 治标不治本——可能是连接泄漏。本文给出 PoolSize 计算公式(QPS×RT),用 PoolStats 的 4 个指标判断池太小还是没归还,并演示典型泄漏代码与修复。

2501_92769340的博客 587

RedisLockRegistry redis分布式锁(加锁/续期)使用

如果后续锁竞争更重,或者需要更完善的 Watchdog、公平锁、Pub/Sub 唤醒,可以逐步演进到 Redisson。所以它不是检测“业务方法有没有返回”,而是检测。同一个 lockKey,多次。,key 就是你传入的锁名。对象,不会重复 new。

weixin_46136610的博客 204

Redis 键管理命令详解(C++ 版):EXISTS/DEL/KEYS/TTL/TYPE

这是《Redis C++ 实战笔记》系列的第 02 篇。上一篇立了调用约定,从这一篇开始进入正题。先讲"键管理"——它不属于任何一种数据类型,但它操作的是键本身,后面每一种类型都会用到。

wbs_scy的博客 183

Redis 缓存机制:缓存一致性、穿透、击穿与雪崩

Redis缓存通过CacheAside模式减少数据库压力,提升读取性能。核心问题包括缓存一致性、穿透、击穿与雪崩。更新数据库后删除缓存可缓解不一致,但存在竞态风险;缓存穿透可通过空值缓存或布隆过滤器防御;击穿可用互斥锁或逻辑过期应对;雪崩则需随机TTL、高可用部署及限流降级。命中率、延迟等指标需持续监控,关键业务应避免依赖缓存强一致性。

Joy T的博客 166

多存储协同架构:JPA + MyBatis + Elasticsearch + Redis 的职责分工与通用实现

本文阐述了在高并发订单系统中,通过JPA、MyBatis、Elasticsearch与Redis的多存储协同架构实现职责分离:JPA负责事务性写操作与简单查询;MyBatis处理复杂联查与报表统计;Elasticsearch承载海量数据下的多维检索与聚合;Redis用于缓存、防回滚暂存及分布式锁。各存储分工明确,通过异步同步机制联动,兼顾一致性、性能与扩展性,构建高效稳定的系统架构。

BADAO_LIUMANG_QIZHI的博客 249

WordPress 启用 Redis 对象缓存后仍慢或出现陈旧数据:先分清页面缓存 vs 对象缓存,再核连接、前缀与 drop-in

启用 Redis 对象缓存之后,站点仍然慢,或改完选项/菜单/商品后前台还是旧数据——这和近期写过的固定链接 404、登录 Cookie、白屏 Fatal、WP-Cron 堆积、HTTPS 混合内容、数据库连不上、Woo 支付 webhook、媒体上传失败不是一类故障。也别和「只开了页面缓存 / CDN 仍慢」混为一谈:页面缓存管的是整页 HTML;对象缓存管的是跨请求的 options、posts、meta 等对象。Redis drop-in 只是让持久化,自动变成全站页面缓存。

20年技术经验|专注小程序+外贸独立站|已服务500家企业,分享创业中有趣的产品和技术经验。 1369

Redis 从 0 到 1(三十一):主从切换后订单丢了一页——脑裂 2 个丢数场景与 min-replicas

主库网络抖动 10 秒,哨兵切主,原主恢复后数据被全量冲掉——一页订单没了。本文复现脑裂的 2 个丢数场景,用 Go 写入器实测丢数条数,给出 min-replicas-to-write 等 3 项防御配置。

2501_92769340的博客 372

Redis错误复盘总结1

修改自定义set方法:把 替换为 ;并且删除Redis里已经存入的脏缓存数据,防止继续读到旧的错误数据。

houbabap的博客 198
上一篇: springcloud之自定义简易消费服务组件
下一篇: 程序员,除了写好代码,你更应该学会这些!
comeoncomputer
博客等级 码龄15年 11粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值