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 的序列化
所以默认情况下你存入一个对象,实际是通过 Java 原生序列化(ObjectOutputStream) 转成二进制的。
✅ 3. 常见序列化方案对比
✅ 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 自身不做序列化,只是原样展示字节。