SpringBoot 通过RedisTemplate存储对象时,key和Value乱码,特此记录
解决方法:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
@Configuration
public class RedisConfig {
@Autowired
private RedisTemplate redisTemplate;
@Bean
public RedisTemplate redisTemplateInit() {
//设置序列化Key的实例化对象
redisTemplate.setKeySerializer(new StringRedisSerializer());
//设置序列化Value的实例化对象
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
/**
*
* 设置Hash类型存储时,对象序列化报错解决
*/
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
return redisTemplate;
}
}
结果如下:
@Resource
private RedisTemplate<String,Object> redisTemplate;
@RequestMapping("/set")
@ResponseBody
public String insert(HttpServletRequest request) throws InterruptedException {
Ball manage=new Ball();
manage.setCode("1 3 5 7 8 11 31");
manage.setId(1L);
redisTemplate.opsForValue().set("zhangsan", manage, 200,TimeUnit.SECONDS);
Ball map=(Ball) redisTemplate.opsForValue().get("zhangsan");
System.out.println(JSONObject.toJSON(map));
return "Success";
}