【问题标题】:How do I get all the keys from a redis cache via Spring Boot?如何通过 Spring Boot 从 redis 缓存中获取所有密钥?
【发布时间】:2018-01-27 06:53:29
【问题描述】:

我有一个通过 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”?

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

【问题讨论】:

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


    【解决方案1】:

    确保自动装配到缓存管理器中的 redisTemplate 使用正确的序列化程序。如果是字符串键:

    redisTemplate.setKeySerializer(new StringRedisSerializer())

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-06
      • 2021-04-24
      • 1970-01-01
      • 2017-01-12
      • 2016-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多