Spring Boot 3中使用 Lettuce RedisTemplate 连接 Redis 集群
2023-12-13 18:14:33
文章目录
一 背景
最近在Spring Boot3 应用系统开发过程中,使用了官方的spring-boot-starter-data-redis
依赖来操作Redis单节点和集群。在操作单节点时,直接使用了RedisTemplate来对节点进行操作。参考了官方案例,非常方便,几行代码实现了Redis单节点操作。在开发测试时偷了个懒,没有搭建集群。当连接地址替换为集群时,发现客户端不能直接操作集群,顿时懵了!查了官网资料,也仅有寥寥几行,网上目前还是大量使用Jedis客户端来连接操作Redis集群,Lettuce相关的资料也极为稀少。查阅 Spring 官方文档和Lettucce官方文档最终找到了解决方案!还好没放弃!
二 解决步骤
2.1 将 Redis 配置注入 RedisTemplate 相关 Bean
在配置类内增加以下内容:
private RedisProperties redisProperties;
@Autowired
public void setRedisProperties(RedisProperties redisProperties) {
this.redisProperties = redisProperties;
}
@Bean("lettuce_template")
public RedisTemplate<String, String> redisTemplate() {
RedisClusterConfiguration redisClusterConfiguration = new RedisClusterConfiguration(redisProperties.getCluster().getNodes());
redisClusterConfiguration.setPassword(redisProperties.getPassword());
LettuceConnectionFactory lettuceConnectionFactory = new LettuceConnectionFactory(redisClusterConfiguration);
lettuceConnectionFactory.afterPropertiesSet();
RedisTemplate<String, String> template = new RedisTemplate<>();
template.setConnectionFactory(lettuceConnectionFactory);
template.afterPropertiesSet();
return template;
}
lettuce_template 这个 Bean 就能成功读取配置文件中的 Redis 集群配置信息,包括节点详情和密码。
2.2 application.properties 配置
配置文件内必须确保存在以下配置,以便Bean初始化时可以正确获取。
spring.data.redis.cluster.nodes=172.31.164.149:6001,172.31.164.149:6002,172.31.164.149:6003,172.31.164.149:6004,172.31.164.149:6005,172.31.164.149:6006
spring.data.redis.password=C*x#1a2b
2.3 使用 Bean
将 lettuce_template 注入到相关组件使用,操作与单节点一致。需要注意的是,注入需使用@Qualifier("lettuce_template")
指定,以避免冲突。其他使用方法参见官网文档。
三 总结
1、单节点与集群的初始化方式是不一样的,这一点需要牢记,Bean 不能直接套用,官网的 RedisTemplate 是针对单节点的;
2、Bean注入时尽量指定名称,避免冲突。
四 参考文档
1、Redis Cluster
2、Working with Objects through RedisTemplate
3、Lettuce reference documentation
文章来源:https://blog.csdn.net/solaraceboy/article/details/134976166
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!