按照網(wǎng)上大多數(shù)的配置, 最后查看redis里的內(nèi)容愧旦,各種\x0\x0\x00\x000\x0\x0
墩弯,一看就是JdkSerializationRedisSerializer序列化的,注入Jackson2JsonRedisSerializer的redisTemplate并沒有起作用正驻,直到按這篇文章配置才解決厌蔽。這篇文章中在配置cacheManager的時候把Jackson2JsonRedisSerializer注入進去了牵辣。
用Jackson2JsonRedisSerializer,被序列化的類不需要實現(xiàn)Serializable接口奴饮,也不會出現(xiàn)使用spring-boot-devtools
時反序列化遇到的類型轉(zhuǎn)換異常https://chenzhihao.cc/archives/526纬向。
原文:http://www.morecoder.com/article/1047654.html
Spring Boot Cache + redis配置
一、介紹
- 環(huán)境:SpringBoot2.X + SpringDataRedis
- Spring boot默認使用的是SimpleCacheConfiguration拐云,使用ConcurrentMapCacheManager來實現(xiàn)緩存罢猪。
二近她、配置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保存數(shù)據(jù)亂碼的問題
- 解決從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);
//解決查詢緩存轉(zhuǎn)換異常的問題
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();
}