前言
springboot2之前redis的连接池为jedis,2.0以后redis的连接池改为了lettuce,lettuce能够支持redis4,需要java8及以上。
lettuce是基于netty实现的与redis进行同步和异步的通信。
lettuce和jedis比较:jedis使直接连接redis server,如果在多线程环境下是非线程安全的,这个时候只有使用连接池,为每个jedis实例增加物理连接 ; lettuce的连接是基于Netty的,连接实例(StatefulRedisConnection)可以在多个线程间并发访问,StatefulRedisConnection是线程安全的,所以一个连接实例可以满足多线程环境下的并发访问,当然这也是可伸缩的设计,一个连接实例不够的情况也可以按需增加连接实例。
Redisson实现了分布式和可扩展的Java数据结构,和Jedis相比,功能较为简单,不支持字符串操作,不支持排序、事务、管道、分区等Redis特性。Redisson的宗旨是促进使用者对Redis的关注分离,从而让使用者能够将精力更集中地放在处理业务逻辑上。
整合lettuce
<!--spring session-->
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
<version>2.0.5.RELEASE</version>
</dependency>
RedisAutoConfiguration完成了对JedisConnectionFactory和LettuceConnectionFactory的自动配置。同时
RedisProperties封装了redis配置
application.yml
#jedis客户端配置
spring:
redis:
cluster:
nodes:
- 192.168.56.128:7000
- 192.168.56.128:7001
- 192.168.56.128:7002
# Redis默认情况下有16个分片,配置具体使用的分片,默认为0
database: 0
lettuce:
pool:
# 连接池最大连接数 默认8 ,负数表示没有限制
max-active: 8
# 连接池最大阻塞等待时间(使用负值表示没有限制) 默认-1
max-wait: -1
# 连接池中的最大空闲连接 默认8
max-idle: 8
# 连接池中的最小空闲连接 默认0
min-idle: 0
构建一个带有@Configuration配置文件,在spring boot 启动时会自动扫描并注册bean
@Configuration
public class App {
/**
* springboot2.x 使用LettuceConnectionFactory 代替 RedisConnectionFactory
* 在application.yml配置基本信息后,springboot2.x RedisAutoConfiguration能够自动装配 LettuceConnectionFactory 和 RedisConnectionFactory 及其 RedisTemplate
* @param redisConnectionFactory
* @return
*/
@Bean
public RedisTemplate redisTemplate(LettuceConnectionFactory redisConnectionFactory){
RedisTemplate redisTemplate = new RedisTemplate();
redisTemplate.setConnectionFactory(redisConnectionFactory);
//配置序列化方式
redisTemplate.setKeySerializer(new StringRedisSerializer());
//使用fastjson 代替 GenericJackson2JsonRedisSerializer
redisTemplate.setValueSerializer(new GenericFastJsonRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer(new GenericFastJsonRedisSerializer());
return redisTemplate;
}