Spring Boot Redis 组件配置

配置示例

@Configuration
public class RedisConfig {
   //基于注解的序列化设置
   @Bean
   public RedisCacheManager redisCacheManager(RedisConnectionFactory redisConnectionFactory, CacheProperties cacheProperties) {
      //序列化方式,分别为String格式和Json格式
      RedisSerializer<String> stringRedisSerializer = new StringRedisSerializer();
      Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
      //json与对象转换的核心类
      ObjectMapper om = new ObjectMapper();
      //解决查询缓存转换异常问题
      om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
      om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
      //设置转换核心类
      jackson2JsonRedisSerializer.setObjectMapper(om);
      //用于读取配置文件,内部使用@ConfigurationProperties(prefix = "spring.cache")注解
      CacheProperties.Redis redisProperties = cacheProperties.getRedis();
      RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig();
      // 指定key缓存序列化方式为String
      config=config.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(stringRedisSerializer));
      // 指定value缓存序列化方式为json
      config = config.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer));
      // 设置配置文件中的各项配置,如过期时间,选择性配置
      config = config.entryTtl(Duration.ofDays(1));
      config = config.prefixKeysWith(redisProperties.getKeyPrefix());
      config = config.disableCachingNullValues();
      config = config.disableKeyPrefix();
      
      RedisCacheManager redisCacheManager=RedisCacheManager.builder(redisConnectionFactory).cacheDefaults(config).build();
      return redisCacheManager;
   }
   //基于api的序列化设置
   @Bean
   public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
      RedisTemplate<String, Object> template = new RedisTemplate<>();
      //序列化方式,分别为String格式和Json格式
      RedisSerializer<String> stringRedisSerializer = new StringRedisSerializer();
      Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
      //json与对象转换的核心类
      ObjectMapper om = new ObjectMapper();
      //解决查询缓存转换异常问题
      om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
      om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
      //设置转换核心类
      jackson2JsonRedisSerializer.setObjectMapper(om);
      template.setConnectionFactory(factory);
      //设置默认序列化方式,下面单独设置会覆盖默认
      template.setDefaultSerializer(jackson2JsonRedisSerializer);
      //key序列化方式为string格式
      template.setKeySerializer(stringRedisSerializer);
      //value序列化为Json格式
      template.setValueSerializer(jackson2JsonRedisSerializer);
      //value hashmap序列化为Json格式
      template.setHashKeySerializer(jackson2JsonRedisSerializer);
      template.setHashValueSerializer(jackson2JsonRedisSerializer);
      return template;
   }
}

ObjectMapper

用于JSON与对象间转换
Java使用ObjectMapper的简单示例 - Fire♪一度 - 博客园 (cnblogs.com)

四种序列化方式

Redis - RedisTemplate及4种序列化方式深入解读 - 云+社区 - 腾讯云 (tencent.com)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值