Spring Boot Redis中,keys()方法返回亂碼如何解決?

Spring Boot Redis中,keys()方法返回亂碼如何解決?

spring Boot redis 中 keys() 方法返回亂碼的根本原因及解決方案

spring boot 應用中集成 redis 時,使用 redisTemplate.keys() 方法獲取鍵值經常出現亂碼問題。這主要是因為 RedisTemplate 默認的鍵序列化方式與實際鍵的類型不匹配導致的。本文將詳細分析此問題并提供有效的解決方案。

問題根源在于,開發者通常使用自定義序列化器(例如 FastJson2JsonRedisSerializer)對 Redis 的值進行序列化,卻忽略了對鍵的序列化處理。 redisTemplate.keys() 方法直接使用 Redis 自身的序列化機制,當鍵并非簡單的字符串類型時,就會導致亂碼。

解決方案:正確設置 RedisTemplate 的鍵序列化器

解決此問題的關鍵在于為 RedisTemplate 正確設置鍵序列化器,確保所有鍵都被序列化為字符串。 以下是一個修正后的 Redis 配置類示例,使用 StringRedisSerializer 序列化鍵,并使用 FastJson2JsonRedisSerializer 序列化值:

@Configuration public class RedisConfig {      @Bean     public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {         RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();         redisTemplate.setConnectionFactory(redisConnectionFactory);          FastJson2JsonRedisSerializer<Object> fastJsonRedisSerializer = new FastJson2JsonRedisSerializer<>(Object.class);         redisTemplate.setValueSerializer(fastJsonRedisSerializer);         redisTemplate.setKeySerializer(new StringRedisSerializer());          return redisTemplate;     } }

此配置中,我們用 StringRedisSerializer 作為 keySerializer,確保所有鍵都被序列化為字符串,從而避免了 redisTemplate.keys() 方法返回亂碼的問題。 setValueSerializer 用于設置值的序列化器,這里仍然使用 FastJson2JsonRedisSerializer。 代碼去除了原有配置中一些冗余的設置,使配置更簡潔易懂。

通過以上配置,redisTemplate.keys() 方法將返回正確的字符串類型的鍵,從而有效解決亂碼問題,確保 Redis 鍵值以正確的格式存儲和讀取。

? 版權聲明
THE END
喜歡就支持一下吧
點贊15 分享