spring boot 整合redis
redis简介
redis是一个开源的、高性能的key-value非关系型数据库,是为了解决高并发、高扩展,大数据存储等系列问题而产生的数据库解决方案。
redis提供了五种数据类型:
- string(字符串)
- list(双向链表)
- dict(hash表)
- set(集合)
- zset(排序set)
redis优点
- 读写速度快,它把数据都读取到内存中操作。
- 支持数据持久化到硬盘当中。
- 提供了丰富的数据结构。
- 所有操作都是原子性,支持事务。要么全部执行,要么不执行。
- 支持主从复制,主句会自动将数据同步到从机,可以进行读写分离。
spring boot 整合redis
redis环境: vmware运行centos7。
- 导入依赖坐标
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
- 配置
客户端配置选择lettuce,因为redis start中引用的是它
spring:
redis:
# Redis数据库索引(默认为0)
database: 2
# Redis服务器地址
host: 192.162.163.3
# Redis服务器连接端口
port: 6379
# Redis服务器连接密码(默认为空)
password: 123456
# 连接超时时间(毫秒)
timeout: 5000
lettuce:
pool:
# 连接池最大连接数(使用负值表示没有限制)
max-active: 200
# 连接池最大阻塞等待时间(使用负值表示没有限制)
max-wait: 10000
# 连接池中的最大空闲连接
max-idle: 200
# 连接池中的最小空闲连接
min-idle: 0
- 测试是否配置成功
@Autowired
StringRedisTemplate redisTemplate;
@Test
void test1(){
redisTemplate.opsForValue().set("cc","二狗蛋");
}
此时会报错,Error creating bean with name 'redisConnectionFactory'
原因:因为lettuce,依赖commons-pool2,所以引入该包即可。
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
结果如下,说明已经整合成功
-
重新装配RedisTemplate
查看源码,可知spring容器中已经自动生成了一个RedisTemplate和StringRedisTemplate实例,我们可以通过源码上的@ConditionalOnMissingBean,自己写个配置类,覆盖源码中的bean.
-
具体操作
- 写配置类
@Configuration public class RedisConfig { /** * 自定义redisTemplate,就不会使用默认的redisTemplate */ @Bean(name = "redisTemplate") public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory redisConnectionFactory){ RedisTemplate<String,Object> redisTemplate = new RedisTemplate<>(); StringRedisSerializer stringRedisSerializer = new StringRedisSerializer(); // FastJsonRedisSerializer<Object> fastJsonRedisSerializer = new FastJsonRedisSerializer(Object.class); FastJson2JsonRedisSerializer<Object> fastJsonRedisSerializer = new FastJson2JsonRedisSerializer<>(Object.class); redisTemplate.setConnectionFactory(redisConnectionFactory); //redis开启事务 redisTemplate.setEnableTransactionSupport(true); redisTemplate.setKeySerializer(stringRedisSerializer); //使用Fastjson2JsonRedisSerializer来序列化和反序列化redis的value值 redisTemplate.setValueSerializer(fastJsonRedisSerializer); redisTemplate.setHashKeySerializer(stringRedisSerializer); redisTemplate.setHashValueSerializer(fastJsonRedisSerializer); redisTemplate.setDefaultSerializer(stringRedisSerializer); redisTemplate.afterPropertiesSet(); return redisTemplate; } }
- 写序列化类
public class FastJson2JsonRedisSerializer<T> implements RedisSerializer<T> { private Class<T> clazz; static { ParserConfig.getGlobalInstance().setAutoTypeSupport(true); //如果遇到反序列化autoType is not support错误,请添加并修改一下包名到bean文件路径 //ParserConfig.getGlobalInstance().addAccept("com.example.redisdemo.domain"); } public FastJson2JsonRedisSerializer(Class<T> clazz){ super(); this.clazz = clazz; } @Override public byte[] serialize(T t) throws SerializationException { if (t ==null) { return new byte[0]; } return JSON.toJSONString(t, SerializerFeature.WriteClassName).getBytes(StandardCharsets.UTF_8); } @Override public T deserialize(byte[] bytes) throws SerializationException { if (bytes == null || bytes.length <= 0){ return null; } String str = new String(bytes,StandardCharsets.UTF_8); return JSON.parseObject(str,clazz); } }
- 封装redis工具类(简单实现,可以自己补充)
@Component public class RedisUtil { @Autowired private RedisTemplate<String, Object> redisTemplate; /** * 判断是否存在 * @param key * @return */ public Boolean hasKey(String key) { Boolean flag = false; if (StringUtils.hasText(key)){ flag = redisTemplate.hasKey(key); } return flag; } /** * 添加 * @param key * @param value */ public void set(String key,Object value){ redisTemplate.opsForValue().set(key,value); } /** * 获取 * @param key * @return */ public Object get(String key){ return redisTemplate.opsForValue().get(key); } /** * 删除 * @param key * @return */ public Boolean del(String key){ return redisTemplate.delete(key); } }
- 执行测试类
@Test void test1(){ System.out.println(redisUtil.hasKey("cc")); System.out.println(redisUtil.del("cc")); redisUtil.set("bb",serverConfig); }
- 写配置类
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现