手打不易,如果转摘,请注明出处!
注明原文: 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
...