TA的每日心情  | 开心 2021-12-13 21:45 | 
|---|
 
  签到天数: 15 天 [LV.4]偶尔看看III  
 | 
 
| 
 
 一、介绍  
  
 环境:Springboot2.X + SpringCache + Redis  
 Spring boot默认使用的是SimpleCacheConfiguration,使用ConcurrentMapCacheManager来实现缓存。  
  
二、配置redis和cache  
1. 引入redis依赖  
  
- <dependency>
 -     <groupId>org.springframework.boot</groupId>
 -     <artifactId>spring-boot-starter-data-redis</artifactId>
 - </dependency>
 
  复制代码 
  
2. 配置文件  
  
- spring:
 -   redis:
 -       host: 192.168.1.192
 -       database: 1
 -       port: 6379
 -       password: 123456
 -       timeout: 1s
 -       jedis:
 -         pool:
 -           max-active: 20
 -           max-idle: 20
 -           min-idle: 10
 -           max-wait: -1ms
 -   cache:
 -     redis:
 -       use-key-prefix: true
 -       key-prefix: dev
 -       cache-null-values: false
 -       time-to-live: 20s
 
  复制代码 
  
   
3. 配置RedisCacheManager  
  
 解决redis保存数据乱码的问题  
 解决从redis反序列化报错的问题  
 增加失效时间  
  
   
  
- @Configuration
 - @ConfigurationProperties(prefix = "spring.cache.redis")
 - public class SpringCacheRedisConfig {
 -     private Duration timeToLive = Duration.ZERO;
 -     public void setTimeToLive(Duration timeToLive) {
 -         this.timeToLive = timeToLive;
 -     }
 -     @Bean
 -     public CacheManager cacheManager(RedisConnectionFactory factory) {
 -         RedisSerializer<String> redisSerializer = new StringRedisSerializer();
 -         Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
 -         //解决查询缓存转换异常的问题
 -         ObjectMapper om = new ObjectMapper();
 -         om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
 -         om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
 -         jackson2JsonRedisSerializer.setObjectMapper(om);
 -         // 配置序列化(解决乱码的问题)
 -         RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
 -                 .entryTtl(timeToLive)
 -                 .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer))
 -                 .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer))
 -                 .disableCachingNullValues();
 -         RedisCacheManager cacheManager = RedisCacheManager.builder(factory)
 -                 .cacheDefaults(config)
 -                 .build();
 -         return cacheManager;
 -     }
 - }
 
  复制代码 
  
   
三、使用缓存  
1. 开启缓存  
  
- @EnableCaching
 - @SpringBootApplication
 - public class StatisticsApplication {
 -     public static void main(String[] args) {
 -         SpringApplication.run(StatisticsApplication.class, args);
 -     }
 - }
 
  复制代码 
  
   
2. 在方法上使用@Cacheable注解  
  
- @Cacheable(value = "userStatistics", key = "methodName")
 - @Override
 - public List<UserStatistics> getListByPage2(UserStatisticsReqVo userStatisticsReqVo) {
 -    Page<UserStatistics> userStatisticsPage = userStatisticsMapper.selectListByPage(userStatisticsReqVo);
 -    return userStatisticsPage.getResult();
 - }
 
  复制代码 
  
四、测试  
   
  |   
 
 
 
 |