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

How get all keys when using POJO as key for Spring Redis cache?

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

当我尝试使用 StringRedisSerializer() 时,我得到一个 class 强制转换异常,提示无法将对象强制转换为字符串。

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

Could not read JSON: Unexpected character ('¬' (code 172)): expected a valid value (number, String, array, object, 'true', 'false' or '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;
    }
}

在某处自动连接你的 RedisTemplate 并试试这个

redisTemplate.keys("*")

请使用

redisTemplate.keys("*")

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

redisTemplate.setKeySerializer(new StringRedisSerializer())