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

How do I get all the keys from a redis cache via Spring Boot?

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

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

这有效,但是当我尝试获取所有密钥(并在那里看到它)时,我得到:

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

但是这个returns是真的:

( ( 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"?

如果我执行任何以“*”开头或结尾的模式查询,它 returns 没有键。

确保自动连接到您的 cacheManager 中的 redisTemplate 使用正确的序列化器。如果是字符串键:

redisTemplate.setKeySerializer(new StringRedisSerializer())