SpringBoot下RedisTemplate操作获取不到内容或出现乱码问题解决

2021-08-30 1536点热度 0人点赞 0条评论

问题描述

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; } }

搞定!

admin

这个人很懒,什么都没留下

文章评论

您需要 登录 之后才可以评论