JDK序列化
RedisTemplate可以接收任意Object作为值写入Redis,只不过写入前会把Object序列化为字节形式,默认是采用JDK序列化,得到的结果是这样的:
我们可以看一下源码:
RedisTemplate默认提供了四种序列化方式

如果不指定序列化方式,那么默认是采用JDK序列化

自定义序列化
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
// 创建Template
RedisTemplate<String, Object> redisTemplate = new RedisTemplate();
// 设置连接工厂
redisTemplate.setConnectionFactory(redisConnectionFactory);
// 设置序列化工具
GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
// key和 hashKey采用 string序列化
redisTemplate.setKeySerializer(RedisSerializer.string());
redisTemplate.setHashKeySerializer(RedisSerializer.string());
// value和 hashValue采用 JSON序列化
redisTemplate.setValueSerializer(jsonRedisSerializer);
redisTemplate.setHashValueSerializer(jsonRedisSerializer);
return redisTemplate;
}
测试

结果

序列化实践方案
RedisTemplate的两种序列化实践方案:
方案一:
自定义RedisTemplate 修改RedisTemplate的序列化器为GenericJackson2JsonRedisSerializer

方案二:
使用StringRedisTemplate 写入Redis时,手动把对象序列化为JSON 读取Redis时,手动把读取到的JSON反序列化为对象
工具
private static final ObjectMapper mapper = new ObjectMapper();

为了节省内存空间,我们并不会使用JSON序列化器来处理value,而是统一使用String序列化器,要求只能存储String类型的key和value。当需要存储Java对象时,手动完成对象的序列化和反序列化。
原文始发于微信公众号(步尔斯特):〖Redis指南④〗Redis序列化实战之RedisSerializer
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/47898.html