〖Redis指南④〗Redis序列化实战之RedisSerializer


JDK序列化

RedisTemplate可以接收任意Object作为值写入Redis,只不过写入前会把Object序列化为字节形式,默认是采用JDK序列化,得到的结果是这样的:

〖Redis指南④〗Redis序列化实战之RedisSerializer为什么会变成乱码呢?

我们可以看一下源码:

RedisTemplate默认提供了四种序列化方式

〖Redis指南④〗Redis序列化实战之RedisSerializer

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

〖Redis指南④〗Redis序列化实战之RedisSerializer

自定义序列化

    @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;
    }

测试

〖Redis指南④〗Redis序列化实战之RedisSerializer

结果

〖Redis指南④〗Redis序列化实战之RedisSerializer

序列化实践方案

RedisTemplate的两种序列化实践方案:

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

〖Redis指南④〗Redis序列化实战之RedisSerializer

方案二:使用StringRedisTemplate 写入Redis时,手动把对象序列化为JSON 读取Redis时,手动把读取到的JSON反序列化为对象

工具

private static final ObjectMapper mapper = new ObjectMapper();
〖Redis指南④〗Redis序列化实战之RedisSerializer

为了节省内存空间,我们并不会使用JSON序列化器来处理value,而是统一使用String序列化器,要求只能存储String类型的key和value。当需要存储Java对象时,手动完成对象的序列化和反序列化。

原文始发于微信公众号(步尔斯特):〖Redis指南④〗Redis序列化实战之RedisSerializer

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/47898.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!