如何通过 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())
我有一个通过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())