SpringBoot集成Redis解决乱码问题 - \xAC\xED\x00\x05t\x00
SpringBoot集成Redis解决乱码问题
问题概述
使用redisTemplate.opsForValue().setset(K key, V value, long timeout, TimeUnit unit)
方法存入Redis数据时,产生乱码如下图。
产生原因
这是因为Reids默认把存入key和value的值序列化成byte[]
格式。
解决方式
在SpringBoot扫描路径下新建配置类RedisTemplateBeanPostProcessor
实现 BeanPostProcessor
接口
package com.company.config;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;
@Configuration
public class RedisTemplateBeanPostProcessor implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
if(RedisTemplate.class.isAssignableFrom(bean.getClass())) {
RedisTemplate redisTemplate = (RedisTemplate)bean;
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
redisTemplate.setKeySerializer(stringRedisSerializer);
redisTemplate.setValueSerializer(stringRedisSerializer);
}
return bean;
}
}