Spring Boot2.X Redis自定义获取key以及序列化

我们需要写一个配置文件:redisCaccheConf
先写结论:纯手打,直接复制过去可能会飘红,不确定有那个字母按错
实现了key的唯一性以及序列化问题

@Configuration
@EnableCaching
public class RedisCacheConf extends CachingConfigurerSupport{
  @Autowired
  private RedisTemplate redisTemplate;
  /**
  *生成key的策略
  *此方法会更具类名,方法名以及入参生成唯一的一个key
  */
  @Bean
  public KeyGenerator keyGenerator(){
    return new KeyGenerator(){
      @Override
      public Object generate(Object target,Method method,Object... params){
        StringBuilder sb = new StringBuilder();
        //各个参数之间用"_"链接
        sb.append(target.getClass().getName).append("_");//类名
        sb.append(method.getName()).append("_");//方法名
        for(Object obj:params){
          if(obj!=null){
            sb.append(obj.toString()).append("_");
          }else{
            sb.append("/").append("_");
          }
        }
        return sb.toString();
      }
    }
  }


/**
*配置redis缓存管理对象
*配置过期时间,序列化
*/
@Bean
public CacheManager cacheManager(RedisConnectionFactory factory){
  RedisSerializer<String> redisSerializer=new StringRedisSerializer();
  Jackon2JsonRedisSerializer jackon2JsonRedisSerializer = new Jackon2JsonRedisSerializer(Object.class);
  //设置5分钟过期时间
  RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofMinutes(5));
//解决序列化问题,防止乱码
  RedisCacheConfiguration redisCacheConfiguration  = config
                                                    .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()))
                                                      .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new Jackson2JsonRedisSerializer<>(Object.class)));

  RedisCacheManager redisCacheManager = RedisCacheManager.builder(factory)
                        .cacheDefaults(redisCacheConfiguration).bulid();


return redisCacheManager;
}


     /**
     *  实例化 RedisTemplate 对象
     * @return
     */
    @Bean(name = "redisTemplate")
    public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, String> redisTemplate = new RedisTemplate<>();
        RedisSerializer<String> redisSerializer = new StringRedisSerializer();
Jackon2JsonRedisSerializer jackon2JsonRedisSerializer =new Jackon2JsonRedisSerializer(Object.class);
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL,JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackon2JsonRedisSerializer.setObjectMapper(om);
        redisTemplate.setConnectionFactory(factory);
        redisTemplate.setKeySerializer(redisSerializer);
        redisTemplate.setHashValueSerializer(jackon2JsonRedisSerializer);
        redisTemplate.setValueSerializer(jackon2JsonRedisSerializer);
        return redisTemplate;
    }

}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,442评论 0 9
  • 1.1 资料 ,最好的入门小册子,可以先于一切文档之前看,免费。 作者Antirez的博客,Antirez维护的R...
    JefferyLcm阅读 17,110评论 1 51
  • 果然还是一个套呀!看来是逃不过先救妈妈还是先救女友这个人生终极拷问了,小岚这是要先教会小翔游泳再问这个问题的节奏呀...
    翊漫阅读 486评论 1 2
  • 一块小小的甜品就好像是天使一样,带走人们生活中所有的不开心,为人们带来甜蜜,一抹阳光甜品,轻甜食主义的倡导者。 没...
    初恋樱海阅读 314评论 0 0
  • 8.仔细阅读下列每一段对话。如果你注意到任何在本章总结的思维错误,找出它们。然后判定哪一个问题的观点更合理并且解释...
    邓洁儿阅读 137评论 0 0