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

2021-08-30 33点热度 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.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(valueSerializer);

        template.setConnectionFactory(factory);

        return template;
    }
}

搞定!

admin

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

文章评论

*

code