Redis之RedisTemplate的序列化方式深入解读

本文深入探讨了Spring Data Redis中RedisTemplate的序列化方式,包括JDK序列化(默认)、String序列化和JSON序列化(如GenericJackson2JsonRedisSerializer与Jackson2JsonRedisSerializer)。重点讨论了各种方式的优缺点,特别是在对象反序列化时的注意事项和潜在问题。建议在实际项目中使用GenericJackson2JsonRedisSerializer以确保类型安全。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

使用Spring提供的Spring Data Redis操作redis必然要使用Spring提供的模板类RedisTemplate,使用RedisTemplate离不开Redis的序列化方式,今天通过本篇文章主要讲解Redis序列化的那些坑。

RedisTemplate

 

可以看到4个序列化相关的属性 ,主要是用于KEY和VALUE的序列化,比如说我们经常会将POJO对象存储到Redis中,一般情况下会使用JSON方式序列化成字符串存储到Redis中 。

Spring提供的Redis数据结构的操作类

  • ValueOperations 类,提供 Redis String API 操作

  • ListOperations 类,提供 Redis List API 操作

  • SetOperations 类,提供 Redis Set API 操作

  • ZSetOperations 类,提供 Redis ZSet(Sorted Set) API 操作

  • GeoOperations 类,提供 Redis Geo API 操作

  • HyperLogLogOperations 类,提供 Redis HyperLogLog API 操作

StringRedisTemplate

RedisTemplate支持泛型,StringRedisTemplate K/V 均为String类型。

org.springframework.data.redis.core.StringRedisTemplate 继承RedisTemplate类,使用 org.springframework.data.redis.serializer.StringRedisSerializer字符串序列化方式。

​RedisSerializer序列化接口

RedisSerializer接口是Redis序列化接口,用于Redis KEY和VALUE的序列化。

RedisSerializer接口的实现类如下:

默认Redis提供了11中的序列化方式,归类一下主要分为:

  • JDK序列化方式(默认)

  • String序列化方式

  • JSON序列化方式

  • XML序列化方式

JDK序列化方式(默认)

org.springframework.data.redis.serializer.JdkSerializationRedisSerializer,默认不配置的情况RedisTemplate采用的是该数据序列化方式,可以查看一下源码:

Spring Boot自动化配置RedisTemplate Bean对象时,就未设置默认的序列化方式。绝大多数情况下,并不推荐使用 JdkSerializationRedisSerializer进行序列化。主要是不方便人工排查数据。我们来做个测试:

​运行单元测试:

 

​发现key跟value的值都是16进制字符串,可以看到key跟value实际上保存的都是以byte[]字节数组的格式存储:

key被序列化成这样,线上通过key去查询对应的value非常不方便,所以key肯定是不能被这样序列化的。value被序列化成这样,除了阅读可能困难一点,不支持跨语言外,实际上也没多大问题。不过,实际线上场景,还是使用JSON序列化居多。

String序列化方式

org.springframework.data.redis.serializer.StringRedisSerializer,字符串和二进制数组都直接转换:

默认的话,StringRedisTemplate的key和value采用的就是这种序列化方案。

JSON序列话方式

GenericJackson2JsonRedisSerializer


org.springframework.data.redis.seria

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值