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();
- }
复制代码
四、测试
|
|