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

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

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

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

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

Could not read JSON: Unexpected character ('¬' (code 172)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')

我怎样才能得到所有的 key ?

我正在通过 @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.keys("*")

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

redisTemplate.setKeySerializer(new StringRedisSerializer())

关于java - 使用 POJO 作为 Spring Redis 缓存的键时,如何获取所有键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48555430/

相关文章:

java - 找不到 UsernamePasswordAuthenticationToken 的 AuthenticationProvider - Spring-boot + Oauth2 : Restful API

java - "Unexpected token"使用下界通配符 (Java)

java - 在 Rythm 中使用另一个变量设置一个变量

java - 修改Java源代码文件并添加一些代码行

Spring 表达式语言 (SpEL) 不适用于 JPA/hibernate 实体

spring - 不在 Spring boot、Thymeleaf 和 A​​ngularJs 应用程序中加载静态资源

java - 在类路径上添加属性文件

java - Windows下如何用特定的server.xml启动Tomcat?

带有Apache Tiles的Spring Boot

java - 如何将 application.yml 中的映射注入(inject)到 Spring Boot 中的字段中?