Spring Data Redis
Spring Data Redis 将 Lettuce、Jedis、Standalone、Sentinel、Cluster 统一到 RedisConnectionFactory,再由 RedisTemplate 组合连接、序列化、事务与命令操作。
本册问题地图
Section titled “本册问题地图”Spring Data Redis 的核心是把不同 Redis 客户端统一成 Spring 资源模型,同时保留命令、事务、序列化和消息订阅的差异。本册追踪:
- ConnectionFactory 如何创建、复用和释放底层连接?
- RedisTemplate 如何把对象操作翻译成连接回调和序列化命令?
- key、value、hash field 和 stream entry 分别由谁序列化?
- Pipeline、事务和线程绑定为什么不能混用普通连接?
- Pub/Sub 与 Stream 在消费、确认和失败恢复上有什么不同?
| 项 | 值 |
|---|---|
| 仓库 | spring-projects/spring-data-redis |
| 本地路径 | E:\source\java\spring\spring-data-redis |
| 分支 | main |
| Commit | bc6fa4abeb186521f8cb5ec30e855340a3c5f3a3(2026-08-13) |
| 最近 tag | 4.1.0 |
本册坐标均基于上述 commit,上游演进后行号可能漂移。
它解决什么问题
Section titled “它解决什么问题”- 统一不同 Redis 驱动的连接、池、Sentinel 和 Cluster 生命周期。
- 把 Java 对象与 Redis 的
byte[]协议边界隔离开。 - 将事务绑定、管道、脚本、Pub/Sub 和 Stream 接入 Spring 生命周期。
| 模块 | 职责 | 关键类 |
|---|---|---|
connection |
驱动无关连接抽象 | RedisConnectionFactory、RedisConnection |
connection/lettuce、connection/jedis |
驱动适配 | LettuceConnectionFactory、JedisConnectionFactory |
core |
模板、操作对象、事务和脚本 | RedisTemplate、RedisConnectionUtils |
serializer |
String、Java、JSON 序列化 | RedisSerializer、RedisSerializationContext |
listener、stream |
Pub/Sub 与 Stream 消费 | RedisMessageListenerContainer、StreamPollTask |
读码入口顺序
Section titled “读码入口顺序”RedisConnectionFactory#getConnection:驱动无关边界。LettuceConnectionFactory#start/JedisConnectionFactory#start:资源创建。RedisTemplate#execute:一次命令的完整链路。RedisConnectionUtils#doGetConnection:线程绑定和事务同步。RedisSerializer:对象到字节数组的边界。RedisMessageListenerContainer、StreamPollTask:长连接消费。
| 对象 | 对照点 |
|---|---|
| Redis 原生客户端 | Spring Data Redis 增加生命周期、序列化和事务同步 |
| Spring JDBC | 都用回调屏蔽资源获取与释放 |
| Redisson | 本项目偏数据访问,Redisson 偏高层分布式对象 |