springboot混用RedisTemplate(lettuce、jedis)和Redisson客户端

手打不易,如果转摘,请注明出处!

注明原文: https://zhangxiaofan.blog.csdn.net/article/details/136679352

redis常用的三大客户端:lettuce、jedis、redisson

一般都是 lettuce + redisson(推荐) 或者 jedis + redisson 混用

RedisTemplate和Redisson的Bean定义

假设项目使用到的RedisTemplate和Redisson如下:

RedisTemplate

java 复制代码
/**
 * Redis配置信息
 */
@Configuration
@AutoConfigureAfter(RedisAutoConfiguration.class)
public class RedisTemplateConfig {
    @Bean("redisTemplate")
    public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, String> template = new RedisTemplate<>();
        ...
        template.afterPropertiesSet();
        return template;
    }
}

Redisson

Redisson客户端Bean如下

java 复制代码
/**
 * Redisson 配置属性类
 */
@Configuration
public class RedissonConfig {

    /**
     * 集群配置
     */
    @Value("${redis.redisson.cluster.nodes:}")
    private String clusters;

    /**
     * host
     */
    @Value("${redis.redisson.host:}")
    private String redisHost;

    /**
     * 端口
     */
    @Value("${redis.redisson.port:}")
    private String redisPort;


    /**
     * RedissonClient redisson
     */
    @Bean(destroyMethod = "shutdown")
    public RedissonClient redisson() {
        Config config = new Config();
        ...
        return Redisson.create(config);
    }
}

方式1:RedisTemplate(Lettuce)+Redisson 客户端

注意,Redisson 没有用 redisson-spring-boot-starter,用自定义的配置类装配bean。

pom.xml 内容如下:

java 复制代码
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
            <version>2.7.18</version>
        </dependency>

        <dependency>
            <groupId>org.redisson</groupId>
            <artifactId>redisson</artifactId>
            <version>3.24.3</version>
        </dependency>

不需要再添加其他依赖。

application.properties 配置如下:

java 复制代码
spring.redis.database = 0
spring.redis.cluster.nodes = xxxx
spring.redis.password= xx
spring.redis.cluster.max-redirects = 3
spring.redis.timeout = 1000
spring.redis.lettuce.pool.min-idle = 0
spring.redis.lettuce.pool.max-idle = 8
spring.redis.lettuce.pool.max-active = 8
spring.redis.lettuce.pool.max-wait = 10000

redis.redisson.database = 0
redis.redisson.cluster.nodes = xxxx
redis.redisson.password = xxx
redis.redisson.port = 6379

注意:spring-boot-starter-data-redis 自带 spring-data-redis,默认使用的 lettuce 客户端

这样项目中实现了 lettuce(redisTemplate) + redisson 客户端混用

方式2:RedisTemplate(Jedis)+Redisson 客户端

注意,Redisson 没有用 redisson-spring-boot-starter,用自定义的配置类装配bean。

由于 spring-data-redis 默认是使用 lettuce 客户端,如果要用 Jedis 必须排除 lettuce:

java 复制代码
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>io.lettuce</groupId>
                    <artifactId>lettuce-core</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

完整的 pom.xml 文件如下:

java 复制代码
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
            <version>2.7.18</version>
            <exclusions>
                <exclusion>
                    <groupId>io.lettuce</groupId>
                    <artifactId>lettuce-core</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.redisson</groupId>
            <artifactId>redisson</artifactId>
            <version>3.24.3</version>
        </dependency>

application.properties 配置如下:

java 复制代码
spring.redis.database = 0
spring.redis.cluster.nodes = xxxx
spring.redis.password= xx
spring.redis.cluster.max-redirects = 3
spring.redis.timeout = 1000
spring.redis.jedis.pool.min-idle = 0
spring.redis.jedis.pool.max-idle = 8
spring.redis.jedis.pool.max-active = 8
spring.redis.jedis.pool.max-wait = 10000

redis.redisson.database = 0
redis.redisson.cluster.nodes = xxxx
redis.redisson.password = xxx
redis.redisson.port = 6379

方式3:RedisTemplate(Redisson )+Redisson 客户端

这种方式就是只使用Redisson客户端。

根据自己项目的版本,修改相关的pom.xml内容:

java 复制代码
        <dependency>
            <groupId>org.redisson</groupId>
            <artifactId>redisson-spring-boot-starter</artifactId>
            <version>${redisson-spring-boot-starter.version}</version>
            <exclusions>
                <exclusion>
                    <artifactId>redisson-spring-data-31</artifactId>
                    <groupId>org.redisson</groupId>
                </exclusion>
            </exclusions>
            <version>3.24.3</version>
        </dependency>

        <dependency>
            <groupId>org.redisson</groupId>
            <artifactId>redisson-spring-data-27</artifactId>
            <version>3.24.3</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-redis</artifactId>
            <version>2.6.3</version>
        </dependency>

注意地方:

需要引入 redisson-spring-boot-starter, 并且根据spring-boot的版本,确定是否要排除 redisson-spring-data-xx,引入正确的版本。否则会报错:Could not initialize class org.redisson.spring.data.connection.RedissonClusterConnection。

原因可以查看文章:

https://zhangxiaofan.blog.csdn.net/article/details/136632372

redisson-spring-data module name Spring Boot version
redisson-spring-data-16 1.3.y
redisson-spring-data-17 1.4.y
redisson-spring-data-18 1.5.y
redisson-spring-data-2x 2.x.y
redisson-spring-data-3x 3.x.y

此时我们只需要写 redisson 的配置即可:

java 复制代码
redis.redisson.database = 0
redis.redisson.cluster.nodes = xxxx
redis.redisson.password = xxx
redis.redisson.port = 6379
...
相关推荐
极客先躯42 分钟前
高级java每日一道面试题-2024年10月3日-分布式篇-分布式系统中的容错策略都有哪些?
java·分布式·版本控制·共识算法·超时重试·心跳检测·容错策略
夜月行者1 小时前
如何使用ssm实现基于SSM的宠物服务平台的设计与实现+vue
java·后端·ssm
程序猿小D1 小时前
第二百六十七节 JPA教程 - JPA查询AND条件示例
java·开发语言·前端·数据库·windows·python·jpa
潘多编程1 小时前
Java中的状态机实现:使用Spring State Machine管理复杂状态流转
java·开发语言·spring
_阿伟_2 小时前
SpringMVC
java·spring
代码在改了2 小时前
springboot厨房达人美食分享平台(源码+文档+调试+答疑)
java·spring boot
wclass-zhengge2 小时前
Redis篇(最佳实践)(持续更新迭代)
redis·缓存·bootstrap
猿java2 小时前
使用 Kafka面临的挑战
java·后端·kafka
wclass-zhengge2 小时前
数据结构篇(绪论)
java·数据结构·算法
Dylanioucn2 小时前
【分布式微服务云原生】探索Redis:数据结构的艺术与科学
数据结构·redis·分布式·缓存·中间件