基于redisson的Redis分布式缓存(一)

 

Redisson提供了将Redis无缝整合到Spring框架的能力。Redisson依照Spring Cache标准提供了基于Redis的Spring缓存实现。 每个缓存(Cache)实例都提供了了两个重要的可配置参数:过期时间(ttl)最长空闲时间(maxIdleTime),如果这两个参数都未指定或值为0,那么实例管理的数据将永久保存。

Jar包 

  1. org.redisson

  2. redisson

  3. 3.7.5

 

RedissonCacheConfig 缓存配置类

创建一个RedissonClient客户端对象,生成了CacheManager缓存管理器,配置一个名叫“testMap”的缓存器,最大缓存时间为24分钟,最大空闲时间12分钟(客户端连接过期时间)

 
  1. @Configuration

  2. @EnableCaching

  3. public class RedissonCacheConfig {

  4.  
  5. @Bean(destroyMethod="shutdown")

  6. RedissonClient redisson() throws IOException {

  7. Config config = new Config();

  8. //config.setCodec(new JsonJacksonCodec()); 默认

  9. config.useClusterServers()

  10. .addNodeAddress("redis://192.168.56.128:7000", "redis://192.168.56.128:7001","redis://192.168.56.128:7002");

  11. return Redisson.create(config);

  12. }

  13.  
  14. @Bean

  15. CacheManager cacheManager(RedissonClient redissonClient){

  16. Map config = new HashMap<>(16);

  17. // create "testMap" cache with ttl = 24 minutes and maxIdleTime = 12 minutes

  18. config.put("testMap",new CacheConfig(24*60*1000,12*60*1000));

  19. return new RedissonSpringCacheManager(redissonClient,config);

  20. }

  21.  
  22. }

 

或者使用yml读取方式配置

 
  1. /**

  2. * redisson客户端

  3. * @return

  4. * @throws IOException

  5. */

  6. @Bean(destroyMethod = "shutdown")

  7. public RedissonClient redissonClient() throws IOException{

  8. Config config = Config.fromYAML(new ClassPathResource("redisson.yml").getInputStream());

  9. //config.setCodec(new JsonJacksonCodec()); 默认

  10. return Redisson.create(config);

  11. }

redisson.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: ! {}

  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. nodeAddresses:

  38. - "redis://192.168.56.128:7000"

  39. - "redis://192.168.56.128:7001"

  40. - "redis://192.168.56.128:7002"

  41. #集群扫描间隔时间 单位毫秒

  42. scanInterval: 1000

  43. threads: 0

  44. nettyThreads: 0

  45. codec: ! {}

 

 

UserServiceImpl 服务类

@Cacheable 属性value指定缓存,属性key指定缓存对象的标识

 
  1. @Service("userService")

  2. public class UserServiceImpl implements UserService {

  3.  
  4. private UserMapper userMapper;

  5.  
  6. @Cacheable(value="testMap",key="targetClass.getName()+'.'+methodName+'.'+#id")

  7. @Override

  8. public User searchUserById(int id) throws Exception {

  9. return userMapper.findUserById(id);

  10.  
  11. }

  12.  
  13.  
  14. }

当我们去执行userService的searchUserById服务方法时,第一次执行去数据库(mysql)中查询数据(耗时较大),完成后将结果缓存到分布式的redis中,再次查询时直接从redis缓存中取出并返回(耗时较小)

 

连接redis 观察存储对象值

./redis-cli -h 192.168.56.129 -p 7000 -c # 需要 -c命令 表示是集群连接,不然进行redis操作,会报(error) MOVED错误

存储结构为hash,key值为@Cacheable的key属性,value值为对象的json形式

基于redisson的Redis分布式缓存(一)_第1张图片

 

参考 

redisson第三方框架整合

你可能感兴趣的:(50,工作中基础学习)