最近在學習 SpringBoot 和 Redis 的集成,使用的時候發現一個問題:經過RedisTemplate存儲進去的鍵值都是16進制的亂碼:java
127.0.0.1:6379> keys * 1) "\xac\xed\x00\x05t\x00\x04name"
經過查閱資料,找到兩種解決方案。redis
@Autowired //private RedisTemplate redisTemplate; private StringRedisTemplate redisTemplate;// 解決Redis鍵值亂碼問題
效果很明顯:spring
127.0.0.1:6379> keys * 1) "name" # 使用 StringRedisTemplate 後解決 2) "\xac\xed\x00\x05t\x00\x04name" # 第一次存的亂碼
a.代碼 set 注入:bash
@Autowired private RedisTemplate redisTemplate; /** * 解決Redis亂碼問題 * @param redisTemplate */ @Autowired(required = false) public void setRedisTemplate(RedisTemplate redisTemplate) { RedisSerializer stringSerializer = new StringRedisSerializer(); redisTemplate.setKeySerializer(stringSerializer); redisTemplate.setValueSerializer(stringSerializer); redisTemplate.setHashKeySerializer(stringSerializer); redisTemplate.setHashValueSerializer(stringSerializer); this.redisTemplate = redisTemplate; }
b.XML配置:學習
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate" p:connection-factory-ref="jedisConnectionFactory"> <property name="keySerializer"> <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" /> </property> <property name="valueSerializer"> <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" /> </property> <property name="hashKeySerializer"> <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" /> </property> <property name="hashValueSerializer"> <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" /> </property> </bean>
修改後的效果:ui
127.0.0.1:6379> keys * 1) "name" # 使用 StringRedisTemplate 後解決 2) "name_2" # 指定序列化方法後解決 3) "\xac\xed\x00\x05t\x00\x04name" # 第一次存的亂碼
亂碼的緣由,請參考 Spring Data操做Redis時,發現key值出現 \xac\xed\x00\x05t\x00\tb ,經過跟蹤源碼發現的問題。this