Spring|Spring Boot2.x 整合lettuce redis 和 redisson

前言
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

org.springframework.session spring-session-data-redis

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.xRedisAutoConfiguration能够自动装配 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; } }

整合Redisson
org.redisson redisson 3.7.5

单独构建一个 redisson.yml 放在项目跟目录(和application.yml同级)
clusterServersConfig: # 连接空闲超时 如果当前连接池里的连接数量超过了最小空闲连接数,而同时有连接空闲时间超过了该数值,那么这些连接将会自动被关闭,并从连接池里去掉。时间单位是毫秒。 idleConnectionTimeout: 10000 pingTimeout: 1000 # 连接超时 connectTimeout: 10000 # 命令等待超时 timeout: 3000 # 命令失败重试次数 retryAttempts: 3 # 命令重试发送时间间隔 retryInterval: 1500 # 重新连接时间间隔 reconnectionTimeout: 3000 # failedAttempts failedAttempts: 3 # 密码 password: null # 单个连接最大订阅数量 subscriptionsPerConnection: 5 # 客户端名称 clientName: null #负载均衡算法类的选择默认轮询调度算法RoundRobinLoadBalancer loadBalancer: ! {} slaveSubscriptionConnectionMinimumIdleSize: 1 slaveSubscriptionConnectionPoolSize: 50 # 从节点最小空闲连接数 slaveConnectionMinimumIdleSize: 32 # 从节点连接池大小 slaveConnectionPoolSize: 64 # 主节点最小空闲连接数 masterConnectionMinimumIdleSize: 32 # 主节点连接池大小 masterConnectionPoolSize: 64 # 只在从服务节点里读取 readMode: "SLAVE" # 主节点信息 nodeAddresses: - "redis://192.168.56.128:7000" - "redis://192.168.56.128:7001" - "redis://192.168.56.128:7002" #集群扫描间隔时间 单位毫秒 scanInterval: 1000 threads: 0 nettyThreads: 0 codec: ! {}

【Spring|Spring Boot2.x 整合lettuce redis 和 redisson】配置Redisson客户端的bean (redisson 默认的编码类为 Jackson Json)
@Configuration public class App { /** * redisson客户端 * @return * @throws IOException */ @Bean(destroyMethod = "shutdown") public RedissonClient redissonClient() throws IOException{ Config config = Config.fromYAML(new ClassPathResource("redisson.yml").getInputStream()); return Redisson.create(config); } }

    推荐阅读