SpringBoot给redis配置String序列化器,防止key变为二进制
Posted 王啸tr1912
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot给redis配置String序列化器,防止key变为二进制相关的知识,希望对你有一定的参考价值。
我们在springboot中使用redis的时候,如果使用了springboot自带的redis管理,没有进行特殊配置的话,会出现一种情况,就是我们set到redis中的值,所有的key值我们获取到的,或者通过工具看到的,都是一堆乱码,根本
无法识别,其原因,是因为,springboot默认给redis使用了java自带的jdk序列化器(JdkSerializationRedisSerializer):
我们需要手工进行配置,使得redis使用StringRedisSerializer 才能正常的存储和显示一般字符,那么需要怎么进行配置呢?
其实,我们只需要构建一个配置类即可:
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
@Configuration
@EnableCaching
public class CacheConfig extends CachingConfigurerSupport
@SuppressWarnings("rawtypes")
@Bean
public CacheManager cacheManager(RedisTemplate redisTemplate)
RedisCacheManager rcm = new RedisCacheManager(redisTemplate);
return rcm;
@Bean
public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory)
StringRedisTemplate template = new StringRedisTemplate(factory);
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
template.setValueSerializer(stringRedisSerializer);
template.afterPropertiesSet();
return template;
将这个类放在我们的项目中,他会在启动的时候自动加载,重新配置redis的序列化方式,从而达到我们的目的。
以上是关于SpringBoot给redis配置String序列化器,防止key变为二进制的主要内容,如果未能解决你的问题,请参考以下文章
SpringBoot整合Redis解决LocalDateTime序列化问题
重学SpringBoot系列之redis与spring cache缓存