使用Spring Cache与Redis。
Cache配置类,
@EnableConfigurationProperties(RedisProperties.class)
@EnableCaching
@Configuration
public class CacheConfiguration {
@Bean
RedisCacheConfiguration redisCacheConfiguration(CacheProperties cacheProperties) {
RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig();
config = config.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()));
// 配置Value缓存为JSON,使用了FastJSON库
config = config.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericFastJsonRedisSerializer()));
CacheProperties.Redis redisProperties = cacheProperties.getRedis();
// 参考org.springframework.beans.factory.ObjectProvider.RedisCacheConfiguration
// createConfiguration方法
// 自定义RedisCacheConfiguration配置,需要下面的代码
// 获取配置文件中(例如 application.yml)的配置
if (redisProperties.getTimeToLive() != null) {
config = config.entryTtl(redisProperties.getTimeToLive());
}
if (redisProperties.getKeyPrefix() != null) {
config = config.prefixCacheNameWith(redisProperties.getKeyPrefix());
}
if (!redisProperties.isCacheNullValues()) {
config = config.disableCachingNullValues();
}
if (!redisProperties.isUseKeyPrefix()) {
config = config.disableKeyPrefix();
}
return config;
}
}
// 设置缓存,分区为order,key为order_page
@Cacheable(value = "order", key = "'order_page'")
// @CacheEvict三种写法,来使得相关缓存删除
// 1.当函数被调用时,会删除key为order_page的缓存数据
@CacheEvict(value = "order", key = "'order_page'")
// 2.当函数被调用时,会删除order分区下的所有缓存数据
@CacheEvict(value = "order", allEntries = true)
// 3.当函数被调用时,会删除key为order_page1,order_page2的缓存数据
@Caching(evict = {
@CacheEvict(value = "order", key = "'order_page1'"),
@CacheEvict(value = "order", key = "'order_page2'")
})
// 双写模式(场景:修改数据后更新缓存)
// 注解下的函数要有返回值才支持双写模式
@CachePut