在SpringBoot中引入Redis
前言
之前我们只是在Spring中加入Redis用于session的存放,并没有对redis进行主动的存放,这次我们需要加入redis工具类来方便我们在实际使用过程中操作redis
已经加入我的github模版中:https://github.com/LinkinStars/springBootTemplate
gradle的redis依赖
//redis相关配置
compile group: 'org.springframework.session', name: 'spring-session-data-redis', version: '1.3.1.RELEASE'
spring相关配置
#redis相关配置
redis:
host: localhost
port: 6379
pool:
# 最大连接数(负值表示没有限制)
max-active: 8
# 最大阻塞等待时间(负值表示没有限制)
max-wait: 1
# 最大空闲链接
max-idle: 8
# 最小空闲链接
min-idle: 0
# 链接超时时间(毫秒)
timeout: 0
redis工具类
package com.linkinstars.springBootTemplate.util; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.StringRedisTemplate; import java.util.concurrent.TimeUnit; /** * Redis操作工具类 * @author LinkinStar */ public class RedisUtil { /** * RedisTemplate 使用的是 JdkSerializationRedisSerializer * StringRedisTemplate 使用的是 StringRedisSerializer * 之后可以通过构建redisTemplate来替换序列化的方式 */ // @Autowired // private RedisTemplate<String, Object> redisTemplate; @Autowired private StringRedisTemplate redisTemplate; /** * 设置过期时间,单位秒 * @param key 键的名称 * @param timeout 过期时间 * @return 成功:true,失败:false */ public boolean setExpireTime(String key, long timeout) { return redisTemplate.expire(key, timeout, TimeUnit.SECONDS); } /** * 通过键删除一个值 * @param key 键的名称 */ public void delete(String key) { redisTemplate.delete(key); } /** * 判断key是否存在 * @param key 键的名称 * @return 存在:true,不存在:false */ public boolean hasKey(String key) { return redisTemplate.hasKey(key); } /** * 字符串存储 * @param key 键 * @param value 值 */ public void setString(String key, String value) { redisTemplate.opsForValue().set(key, value); } /** * 字符串存储(同时设置超时时间) * @param key 键 * @param value 值 * @param timeout 超时时间(以秒为单位) */ public void setStringAndExpireTime(String key, String value, long timeout) { redisTemplate.opsForValue().set(key, value, timeout, TimeUnit.SECONDS); } /** * 字符串取值 * @param key 键 * @return 查询成功:值,查询失败,null */ public String getString(String key) { return (String) redisTemplate.opsForValue().get(key); } /** * 存储哈希表 * @param key 整个哈希表的键 * @param field 表中的键 * @param value 表中的值 */ public void setHash(String key, String field, Object value) { redisTemplate.opsForHash().put(key, field, value); } /** * 获取哈希表 * @param key 整个哈希表的键 * @param field 表中的键 * @return 查询成功:值,查询失败,null */ public Object getHash(String key, String field) { return redisTemplate.opsForHash().get(key, field); } /** * 删除哈希表中的某个元素 * @param key 整个哈希表的键 * @param fields 表中的键 */ public void deleteHash(String key, Object... fields) { redisTemplate.opsForHash().delete(key, fields); } }
redis工具类初始化
/** * session存放redis以及redis工具初始化 * @author LinkinStar */ @Configuration @EnableRedisHttpSession public class RedisSessionConfig { /** * 封装RedisTemplate */ @Bean(name = "redisUtil") public RedisUtil redisUtil() { RedisUtil redisUtil = new RedisUtil(); return redisUtil; } }
redis测试使用
redisUtil.setString("xxx","xxx"); System.out.println("redis数据获取为: " + redisUtil.getString("xxx")); redisUtil.delete("xxx"); System.out.println("redis数据获取为: " + redisUtil.getString("xxx")); redisUtil.setHash("xxxx", "a", "1"); redisUtil.setHash("xxxx", "b", "2"); redisUtil.setHash("xxxx", "c", "3"); System.out.println("redis中hash的数据为: " + redisUtil.getHash("xxxx","a"));
总结
针对于springboot来说,redis的使用与之前不同的地方是
1、不在需要手动去管理pool。
2、不再是按照原先字节数组作为键的方式去存放对象数据,而是采用key对应hashmap的方式存放数据。
3、封装工具类之后使用起来更加方便。
后期需要改进的地方
1、redis的配置需要根据项目实际情况进行修改。
2、redisTemplate序列化方式需要改变,当前的序列化方式为StringRedisSerializer,之后需要根据实际情况,可以是用别的序列化方式,需要从序列化、反序列化的速度以及序列化之后的大小来看。
3、当使用redis集群的时候,配置需要做相应的改动和处理。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
2016-08-01 Chapter 1 First Sight——5