@Configuration
@EnableCaching
public class RedisConfig {
// redis配置
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
template.setConnectionFactory(factory);
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);
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
// key采用String的序列化方式
template.setKeySerializer(stringRedisSerializer);
// hash的key也采用String的序列化方式
template.setHashKeySerializer(stringRedisSerializer);
// value序列化方式采用jackson
template.setValueSerializer(jackson2JsonRedisSerializer);
// hash的value序列化方式采用jackson
template.setHashValueSerializer(jackson2JsonRedisSerializer);
template.afterPropertiesSet();
return template;
}
@Bean
public HashOperations<String, String, Object> hashOperations(RedisTemplate<String, Object> redisTemplate) {
return redisTemplate.opsForHash();
}
// 默认缓存2小时
private static final int DEFAULT_TTL = 7200;
@NoArgsConstructor
@AllArgsConstructor
@Getter
public enum CachesEnum {
//缓存30秒 @Cacheable(value = "XXX_XXX", key = "#type")
XXX_XXX(30);
private int ttl = DEFAULT_TTL;
}
@Bean
public ListOperations<String, Object> listOperations(RedisTemplate<String, Object> redisTemplate) {
return redisTemplate.opsForList();
}
@Bean
public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig();
Map<String, RedisCacheConfiguration> configMap = new HashMap<>();
for (CachesEnum value : CachesEnum.values()) {
configMap.put(value.name(), config.entryTtl(Duration.ofSeconds(value.ttl)));
}
return RedisCacheManager.builder(redisConnectionFactory)
.initialCacheNames(configMap.keySet()) // 注意这两句的调用顺序,一定要先调用该方法设置初始化的缓存名,再初始化相关的配置
.withInitialCacheConfigurations(configMap)
.build();
}
redisConfig配置文件及spring注解方式缓存redis
最新推荐文章于 2023-11-01 17:16:09 发布