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

Don*_*mmy 4 java spring redis spring-data-redis spring-boot

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

\n\n

当我尝试使用StringRedisSerializer()我收到一个类转换异常,表示该对象无法转换为字符串。

\n\n

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

\n\n
\n

无法读取 JSON:意外字符(\'\xc2\xac\'(代码 172)):需要有效值(数字、字符串、数组、对象、\'true\'、\'false\' 或 \'null \')

\n
\n\n

我怎样才能获得所有钥匙?

\n\n

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

\n\n
@EnableCaching\npublic class RedisCacheConfig\n{\n    public static final String REDIS_CACHE_MGR = "RedisCacheManager";\n\n    @Value( "${spring.redis.cluster}" )\n    private List<String> cluster;\n\n    @Bean\n    public JedisConnectionFactory redisConnectionFactory()\n    {\n        JedisConnectionFactory redisConnectionFactory = new JedisConnectionFactory(\n            new RedisClusterConfiguration( cluster )\n        );\n\n        return redisConnectionFactory;\n    }\n\n    @Bean\n    public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory cf)\n    {\n\n        RedisTemplate<String, String> redisTemplate = new RedisTemplate<>();\n        redisTemplate.setConnectionFactory( cf );\n        return redisTemplate;\n    }\n\n    @Bean\n    public CacheManager redisCacheManager(RedisTemplate redisTemplate) throws EagleCacheException\n    {\n        RedisCacheManager cacheManager = new RedisCacheManager( redisTemplate );\n\n        cacheManager.setDefaultExpiration( 3600 );\n\n        return cacheManager;\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

Mik*_*ets 5

请用

redisTemplate.keys("*")

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

redisTemplate.setKeySerializer(new StringRedisSerializer())

  • 不鼓励在生产服务器上使用此命令,因为它是一个阻塞调用,可能会显着降低 Redis 服务器在处理大型数据集时的性能。 (3认同)