lettuce + redisson
当你看到这篇文章的时候,心里会想同一个项目为啥要用2个不同的redis客户端工具,是不是有什么大病???
jedis:客户端实例不是线程安全的,需要借助连接池来管理和使用 Jedis,还有它是阻塞的I/O。不支持异步。
lettuce:首先它是异步和非阻塞的,还支持多种特性,例如:事务、流水线操作、发布/订阅、Lua 脚本等
redisson:对字符串的支持比较差,不支持排序、事务、管道、分区等
所以综上所述,lettuce + redisson 一起使用且不是美滋滋吗?
提前准备
- 使用的springboot版本3.2.7,引入依赖
<!-- redisson ,排除了lettuce,jedis客户端 -->
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
<version>3.32.0</version>
</dependency>
<!-- redis : ,spring boot 默认使用lettuce客户端 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
配置lettuce
配置yml
spring:
data:
redis:
host: localhost
port: 6379
timeout: 10s
password: redis@123
database: 12
lettuce:
pool:
# 连接池中的最小空闲连接
min-idle: 0
# 连接池中的最大空闲连接
max-idle: 8
# 连接池的最大数据库连接数
max-active: 8
# #连接池最大阻塞等待时间(使用负值表示没有限制)
max-wait: -1ms
编写redis配置文件 RedisConfig
@Configuration
@EnableCaching
public class RedisConfig {
@Bean
@SuppressWarnings(value = {
"unchecked", "rawtypes" })
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory)
{
RedisTemplate<Object, Object> template = new RedisTemplate<>();
template.setConnectionFactory(connectionFactory);
FastJson2JsonRedisSerializer serializer = new FastJson2JsonRedisSerializer(Object.class);
// 使用StringRedisSerializer来序列化和反序列化redis的key值
template.setKeySerializer(new StringRedisSerializer());
template.setValueSerializer(serializer);
// Hash的key也采用StringRedisSerializer的序列化方式
template.setHashKeySerializer(new StringRedisSerializer());
template.setHashValueSerializer(serializer);
template.afterPropertiesSet();