当前位置:   article > 正文

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

springboot lettuce 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

 

  1. <!--spring session-->
  2. <dependency>
  3. <groupId>org.springframework.session</groupId>
  4. <artifactId>spring-session-data-redis</artifactId>
  5. <version>2.0.5.RELEASE</version>
  6. </dependency>

RedisAutoConfiguration完成了对JedisConnectionFactory和LettuceConnectionFactory的自动配置。同时

RedisProperties封装了redis配置

application.yml 

  1. #jedis客户端配置
  2. spring:
  3. redis:
  4. cluster:
  5. nodes:
  6. - 192.168.56.128:7000
  7. - 192.168.56.128:7001
  8. - 192.168.56.128:7002
  9. # Redis默认情况下有16个分片,配置具体使用的分片,默认为0
  10. database: 0
  11. lettuce:
  12. pool:
  13. # 连接池最大连接数 默认8 ,负数表示没有限制
  14. max-active: 8
  15. # 连接池最大阻塞等待时间(使用负值表示没有限制) 默认-1
  16. max-wait: -1
  17. # 连接池中的最大空闲连接 默认8
  18. max-idle: 8
  19. # 连接池中的最小空闲连接 默认0
  20. min-idle: 0

构建一个带有@Configuration配置文件,在spring boot 启动时会自动扫描并注册bean

  1. @Configuration
  2. public class App {
  3. /**
  4. * springboot2.x 使用LettuceConnectionFactory 代替 RedisConnectionFactory
  5. * 在application.yml配置基本信息后,springboot2.x RedisAutoConfiguration能够自动装配 LettuceConnectionFactory 和 RedisConnectionFactory 及其 RedisTemplate
  6. * @param redisConnectionFactory
  7. * @return
  8. */
  9. @Bean
  10. public RedisTemplate redisTemplate(LettuceConnectionFactory redisConnectionFactory){
  11. RedisTemplate redisTemplate = new RedisTemplate();
  12. redisTemplate.setConnectionFactory(redisConnectionFactory);
  13. //配置序列化方式
  14. redisTemplate.setKeySerializer(new StringRedisSerializer());
  15. //使用fastjson 代替 GenericJackson2JsonRedisSerializer
  16. redisTemplate.setValueSerializer(new GenericFastJsonRedisSerializer());
  17. redisTemplate.setHashKeySerializer(new StringRedisSerializer());
  18. redisTemplate.setHashValueSerializer(new GenericFastJsonRedisSerializer());
  19. return redisTemplate;
  20. }
  21. }

 

整合Redisson

 

  1. <!--redisson客户端-->
  2. <dependency>
  3. <groupId>org.redisson</groupId>
  4. <artifactId>redisson</artifactId>
  5. <version>3.7.5</version>
  6. </dependency>

单独构建一个 redisson.yml 放在项目跟目录(和application.yml同级)

  1. clusterServersConfig:
  2. # 连接空闲超时 如果当前连接池里的连接数量超过了最小空闲连接数,而同时有连接空闲时间超过了该数值,那么这些连接将会自动被关闭,并从连接池里去掉。时间单位是毫秒。
  3. idleConnectionTimeout: 10000
  4. pingTimeout: 1000
  5. # 连接超时
  6. connectTimeout: 10000
  7. # 命令等待超时
  8. timeout: 3000
  9. # 命令失败重试次数
  10. retryAttempts: 3
  11. # 命令重试发送时间间隔
  12. retryInterval: 1500
  13. # 重新连接时间间隔
  14. reconnectionTimeout: 3000
  15. # failedAttempts
  16. failedAttempts: 3
  17. # 密码
  18. password: null
  19. # 单个连接最大订阅数量
  20. subscriptionsPerConnection: 5
  21. # 客户端名称
  22. clientName: null
  23. #负载均衡算法类的选择 默认轮询调度算法RoundRobinLoadBalancer
  24. loadBalancer: !<org.redisson.connection.balancer.RoundRobinLoadBalancer> {}
  25. slaveSubscriptionConnectionMinimumIdleSize: 1
  26. slaveSubscriptionConnectionPoolSize: 50
  27. # 从节点最小空闲连接数
  28. slaveConnectionMinimumIdleSize: 32
  29. # 从节点连接池大小
  30. slaveConnectionPoolSize: 64
  31. # 主节点最小空闲连接数
  32. masterConnectionMinimumIdleSize: 32
  33. # 主节点连接池大小
  34. masterConnectionPoolSize: 64
  35. # 只在从服务节点里读取
  36. readMode: "SLAVE"
  37. # 主节点信息
  38. nodeAddresses:
  39. - "redis://192.168.56.128:7000"
  40. - "redis://192.168.56.128:7001"
  41. - "redis://192.168.56.128:7002"
  42. #集群扫描间隔时间 单位毫秒
  43. scanInterval: 1000
  44. threads: 0
  45. nettyThreads: 0
  46. codec: !<org.redisson.codec.JsonJacksonCodec> {}

配置Redisson客户端的bean (redisson 默认的编码类为 Jackson Json)

  1. @Configuration
  2. public class App {
  3. /**
  4. * redisson客户端
  5. * @return
  6. * @throws IOException
  7. */
  8. @Bean(destroyMethod = "shutdown")
  9. public RedissonClient redissonClient() throws IOException{
  10. Config config = Config.fromYAML(new ClassPathResource("redisson.yml").getInputStream());
  11. return Redisson.create(config);
  12. }
  13. }

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号