问答

springboot2.X redis注解的问题 会自动添加双引号的前缀

作者:admin 2021-09-13 我要评论

springboot2.X redis注解的问题 会自动添加双引号的前缀 我在自己配置redis 缓存注解的时候,查询数据结果的时候发现了2.0版本会对key 进行namespace进行区分。...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

springboot2.X redis注解的问题 会自动添加双引号的前缀

结果图.png

我在自己配置redis 缓存注解的时候,查询数据结果的时候发现了2.0版本会对key 进行namespace进行区分。原因是他修改了前缀的方法,添加 name + "::" 进行区分。但是我还是希望能删除掉这个前缀,在尝试了多种方法后无果。

@CachePut(value = "api", key = "#key")
   public String put(String key, String token) {
       return token;
   }

这是springboot 2.0 的前缀的源码内容

package org.springframework.data.redis.cache;

@FunctionalInterface
public interface CacheKeyPrefix {
    String compute(String var1);

    static CacheKeyPrefix simple() {
        return (name) -> {
            return name + "::";
        };
    }
}

我希望获取如下的结果

redis正确结果.png

###

我找到一个答案 在我这成功了,也有这个问题的也可以看看。
网址是这个: https://www.cnblogs.com/lzfho...

@Bean
    public CacheManager redisCacheManager(RedisConnectionFactory redisConnectionFactory) {
        RedisSerializer<String> redisSerializer = new StringRedisSerializer();
        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);
    /*    RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
                .entryTtl(Duration.ofMinutes(3))
                .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer))
                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer))
                .disableCachingNullValues();*/
        // key前缀取消的方法
        RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()
                .entryTtl(Duration.ofMinutes(3))
                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer))
                .computePrefixWith(this.keyPrefix);
        RedisCacheManager cm=RedisCacheManager.builder(redisConnectionFactory).cacheDefaults(redisCacheConfiguration).build();
        cm.setTransactionAware(true);
        return RedisCacheManager.builder(redisConnectionFactory)
                .cacheDefaults(redisCacheConfiguration)
                .build();
    }
    // 复写方法 
    CacheKeyPrefix keyPrefix = new CacheKeyPrefix() {
        @Override
        public String compute(String cacheName) {
            return "";
        }
    };

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  •  springboot2.X redis注解的问题 会自

    springboot2.X redis注解的问题 会自

  • react-native init 报错,求解

    react-native init 报错,求解

  • 请问怎么做MySQL的数据优化

    请问怎么做MySQL的数据优化

  • antd upload 图片设置原图保护,无法查

    antd upload 图片设置原图保护,无法查

腾讯云代理商
海外云服务器