如何通过Spring Boot从redis缓存中获取所有密钥?

时间:2018-01-27 06:53:30

标签: java spring spring-boot caching spring-data-redis

我有一个通过Spring Boot缓存redis缓存的服务方法(使用compile("org.springframework.boot:spring-boot-starter-data-redis:1.5.6.RELEASE")):

@Cacheable( value = "test" )
public CacheTestObject getTestObject(String name)
{
    return new CacheTestObject( name );
}

这样可行,但是当我尝试获取所有键(并在那里看到它)时,我得到:

//This returns 0 keys
( ( RedisTemplate ) cacheManager.getCache("test").getNativeCache() ).keys( "*" )

但这会返回true:

( ( RedisTemplate ) cacheManager.getCache("test").getNativeCache() ).hasKey( "Joe" )

以下是全部:

//TRUE
( ( RedisTemplate ) cacheManager.getCache("test").getNativeCache() ).hasKey( "Joe" )

//TRUE
( ( RedisTemplate ) cacheManager.getCache("test").getNativeCache() ).hasKey( "J*e" )

//FALSE
( ( RedisTemplate ) cacheManager.getCache("test").getNativeCache() ).hasKey( "Jo*" )

//FALSE
( ( RedisTemplate ) cacheManager.getCache("test").getNativeCache() ).hasKey( "*oe" )

//FALSE
( ( RedisTemplate ) cacheManager.getCache("test").getNativeCache() ).hasKey( "*" )

这是为什么?为什么我不能使用“”模式获取所有键?甚至“J ”?

如果我执行任何模式查询,其中“*”是第一个或最后一个,它将不返回任何键。

1 个答案:

答案 0 :(得分:1)

确保自动装入您的cacheManager的redisTemplate使用正确的序列化程序。如果是字符串键:

redisTemplate.setKeySerializer(new StringRedisSerializer())