赞
踩
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的关注分离,从而让使用者能够将精力更集中地放在处理业务逻辑上。
- <!--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;
- }
-
-
- }

- <!--redisson客户端-->
- <dependency>
- <groupId>org.redisson</groupId>
- <artifactId>redisson</artifactId>
- <version>3.7.5</version>
- </dependency>
单独构建一个 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: !<org.redisson.connection.balancer.RoundRobinLoadBalancer> {}
- 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: !<org.redisson.codec.JsonJacksonCodec> {}

配置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);
- }
-
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。