当前位置:   article > 正文

致力微服务 SpringCloud 插曲 篇五 数据缓存-整合redis_springcloud结合缓存整合

springcloud结合缓存整合

spring boot 2.x整合redis作为缓存

依赖

  1. <!--springboot redis-->
  2. <dependency>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-starter-data-redis</artifactId>
  5. </dependency>

配置

  1. #redis
  2. # Redis数据库索引(默认为0
  3. spring.redis.database=0
  4. # Redis服务器地址
  5. spring.redis.host=127.0.0.1
  6. # Redis服务器连接端口
  7. spring.redis.port=6379
  8. # Redis服务器连接密码(默认为空)
  9. spring.redis.password=love
  10. # 连接池最大连接数(使用负值表示没有限制)
  11. spring.redis.jedis.pool.max-active=16
  12. # 连接池最大阻塞等待时间(使用负值表示没有限制)
  13. spring.redis.jedis.pool.max-wait=-1
  14. # 连接池中的最大空闲连接
  15. spring.redis.jedis.pool.max-idle=8
  16. # 连接池中的最小空闲连接
  17. spring.redis.jedis.pool.min-idle=0
  18. # 连接超时时间(毫秒)
  19. spring.redis.timeout=60000
  20. #缓存默认过期时间 秒
  21. redis.cache.default.ttl=86400

在spring boot 2.x中配好redis后,spring就已经为我们创建好了对应的cacheManage,在使用@Cacheable等缓存注解后,缓存就会存到redis中

但是我们需要的自定义配置,如redisTemplate的key,value的序列化规则(默认是jdk的JdkSerializationRedisSerializer),以及缓存的默认过期时间(默认无),还有就是保存的键的生成策略

我的配置代码

  1. @Configuration
  2. public class RedisConfiguration extends CachingConfigurerSupport {
  3. @Value("${redis.cache.default.ttl}")
  4. private long ttl;
  5. /**
  6. * redisTemplate
  7. * @param factory
  8. * @return
  9. */
  10. @Bean
  11. public RedisTemplate<Object,Object> redisTemplate(RedisConnectionFactory factory){
  12. RedisTemplate<Object,Object> redisTemplate = new RedisTemplate();
  13. redisTemplate.setConnectionFactory(factory);
  14. // 使用Jackson2JsonRedisSerialize 替换默认序列化 JdkSerializationRedisSerializer 不替换可能出现乱码
  15. Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
  16. ObjectMapper objectMapper = new ObjectMapper();
  17. objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
  18. objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
  19. jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
  20. // 设置value的序列化规则和 key的序列化规则
  21. //使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值(默认使用JDK的序列化方式)
  22. redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
  23. //使用StringRedisSerializer来序列化和反序列化redis的key值
  24. redisTemplate.setKeySerializer(new StringRedisSerializer());
  25. redisTemplate.afterPropertiesSet();
  26. return redisTemplate;
  27. }
  28. /**
  29. * 和spring提供的一样
  30. * @param factory
  31. * @return
  32. */
  33. @Bean
  34. public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory factory){
  35. StringRedisTemplate stringRedisTemplate = new StringRedisTemplate();
  36. stringRedisTemplate.setConnectionFactory(factory);
  37. return stringRedisTemplate;
  38. }
  39. /**
  40. * redis缓存配置
  41. * spring2 整合 redis 后,已存在
  42. * 可自定义配置
  43. */
  44. @Bean
  45. public CacheManager cacheManager(RedisConnectionFactory factory) {
  46. RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofSeconds(ttl));
  47. return RedisCacheManager.builder(RedisCacheWriter.nonLockingRedisCacheWriter(factory)).cacheDefaults(redisCacheConfiguration).build();
  48. }
  49. @Override
  50. public KeyGenerator keyGenerator() {
  51. return new KeyGenerator() {
  52. @Override
  53. public Object generate(Object target, Method method, Object... params) {
  54. StringBuilder sb = new StringBuilder();
  55. sb.append(target.getClass().getName());
  56. sb.append(":");
  57. sb.append(method.getName());
  58. for (Object obj : params) {
  59. sb.append(":" + obj);
  60. }
  61. String rsToUse = String.valueOf(sb);
  62. System.out.println(ttl);
  63. System.out.println("调用Redis缓存Key : " + rsToUse);
  64. return rsToUse;
  65. }
  66. };
  67. }
  68. }

这种缓存配置,就针对于使用注解@Cacheable @CachePut @CacheEvit进行缓存

也可以自定义注解实现reidis缓存,可自定义更多可需要的操作,可参考SpringBoot Redis 缓存失效设置(手写

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/531285
推荐阅读
相关标签
  

闽ICP备14008679号