侧边栏壁纸
博主头像
月伴飞鱼 博主等级

行动起来,活在当下

  • 累计撰写 126 篇文章
  • 累计创建 31 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

Redis的序列化方式是什么?

月伴飞鱼
2025-03-31 / 0 评论 / 1 点赞 / 14 阅读 / 0 字
温馨提示:
部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

Redis 本身是一个 内存键值存储系统,它不关心你存的 value 是什么类型的数据,只以字节数组(byte[])的形式存储键和值。

但在使用 Redis 客户端(特别是在 Java、Spring Boot 等环境中)时,客户端框架负责序列化与反序列化

✅ Redis 的序列化方式(取决于客户端)

🚀 1. 原始 Redis 协议(RESP)

  • Redis 底层使用 RESP 协议(Redis Serialization Protocol)

  • 只关心字节:所有 key、value 在 Redis 层面都是 字符串 或 byte[]

✅ 2. Java 客户端中的序列化方式

以 Spring Boot 使用 Redis 为例,默认使用的是 RedisTemplate,它的序列化行为如下:

🔹 默认 RedisTemplate 的序列化

类型

序列化方式

key、hashKey

StringRedisSerializer(字符串)

value、hashValue

JdkSerializationRedisSerializer(Java 对象序列化)

所以默认情况下你存入一个对象,实际是通过 Java 原生序列化(ObjectOutputStream) 转成二进制的。

✅ 3. 常见序列化方案对比

序列化器

优点

缺点

StringRedisSerializer

简单、可读、兼容性好

只能存 String

JdkSerializationRedisSerializer

支持任意 Java 对象

序列化体积大、跨语言差

Jackson2JsonRedisSerializer

JSON 可读性好,兼容性强

有类信息时较冗余

GenericJackson2JsonRedisSerializer

自动封装类型信息,支持反序列化为对象

JSON 增加额外字段,体积稍大

FastJsonRedisSerializer

JSON 性能更高(阿里 fastjson)

安全性问题较多

Kryo / Protostuff

二进制高性能序列化

非标准,跨语言兼容性差

✅ 4. Spring Boot 推荐做法(序列化配置示例)

@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
    RedisTemplate<String, Object> template = new RedisTemplate<>();
    template.setConnectionFactory(factory);

    // key序列化
    template.setKeySerializer(new StringRedisSerializer());
    // value序列化
    template.setValueSerializer(new Jackson2JsonRedisSerializer<>(Object.class));
    return template;
}

✅ 5. Redis CLI 层面序列化无关

  • 从 Redis 命令行工具看 value 是乱码,说明是经过 Java 或其他客户端序列化过的 byte[]。

  • Redis CLI 自身不做序列化,只是原样展示字节。

🔚 总结

层次

序列化方式

Redis 本身

不做序列化,只存字节

Java 客户端

如 JDK 序列化、JSON、String、Kryo 等

实际使用建议

推荐使用 JSON 序列化(Jackson)或 String 形式(如缓存简单值)

公众号.png

1
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin
    1. 支付宝打赏

      qrcode alipay
    2. 微信打赏

      qrcode weixin
博主关闭了所有页面的评论