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

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

阅读 6k
1 个回答

我找到一个答案 在我这成功了,也有这个问题的也可以看看。
网址是这个: 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 "";
        }
    };
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题