我有一个通过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 ”?
如果我执行任何模式查询,其中“*”是第一个或最后一个,它将不返回任何键。
答案 0 :(得分:1)
确保自动装入您的cacheManager的redisTemplate使用正确的序列化程序。如果是字符串键:
redisTemplate.setKeySerializer(new StringRedisSerializer())