使用POJO作为Spring Redis缓存的密钥时如何获取所有密钥?

时间:2018-02-01 04:37:09

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

我正在使用Spring Data Redis进行缓存,我将密钥作为对象缓存,而不是字符串。如何以这种方式找到缓存中的所有密钥?

当我尝试使用StringRedisSerializer()时,我得到一个类强制转换异常,说该对象不能转换为字符串。

当我尝试Jackson2JsonRedisSerializer时,会抛出异常:

  

无法读取JSON:意外字符('¬'(代码172)):预期有效值(数字,字符串,数组,对象,'true','false'或'null')

如何获得所有密钥?

我正在通过@Cacheable注释进行缓存。

@EnableCaching
public class RedisCacheConfig
{
    public static final String REDIS_CACHE_MGR = "RedisCacheManager";

    @Value( "${spring.redis.cluster}" )
    private List<String> cluster;

    @Bean
    public JedisConnectionFactory redisConnectionFactory()
    {
        JedisConnectionFactory redisConnectionFactory = new JedisConnectionFactory(
            new RedisClusterConfiguration( cluster )
        );

        return redisConnectionFactory;
    }

    @Bean
    public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory cf)
    {

        RedisTemplate<String, String> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory( cf );
        return redisTemplate;
    }

    @Bean
    public CacheManager redisCacheManager(RedisTemplate redisTemplate) throws EagleCacheException
    {
        RedisCacheManager cacheManager = new RedisCacheManager( redisTemplate );

        cacheManager.setDefaultExpiration( 3600 );

        return cacheManager;
    }
}

2 个答案:

答案 0 :(得分:1)

请使用

redisTemplate.keys("*")

但在此之前,请确保您的redisTemplate使用正确的序列化程序。如果是字符串键:

redisTemplate.setKeySerializer(new StringRedisSerializer())

答案 1 :(得分:0)

将RedisTemplate自动装配到某处并尝试此操作

redisTemplate.keys("*")