问题描述
SpringBoot下使用如下,spring-boot-starter-data-redis,使用RedisTemplate/StringRedisTemplate封装了Redis的操作,非常的方便了。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
不过有个问题,发现直接用RedisTemplate塞入值得时候,在key或value里面都会出现前置活着后置的乱码,如hashKey会变成\xac\xed\x00\x05t\x00\x09hashKey 里面的内容也会加上奇奇怪怪的乱码,导致其他应用正常塞入的key,使用redisTemplate会读取不到!
问题解决
经过查证,原来是redis默认使用的jdk的序列化方式,会导致key值或者value出现乱码,我们修改默认的序列化方式即可。
新建 RedisConfiguration.java,内容如下:
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.GenericToStringSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer; @Configuration public class RedisConfiguration { @Bean(name="redisTemplate") public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) { RedisTemplate template = new RedisTemplate(); GenericToStringSerializer<String> keySerializer = new GenericToStringSerializer<>(String.class); template.setKeySerializer(keySerializer); template.setHashKeySerializer(keySerializer); StringRedisSerializer valueSerializer = new StringRedisSerializer(); template.setValueSerializer(valueSerializer); template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer()); template.setConnectionFactory(factory); return template; } }
搞定!
文章评论