Jedis
This content is not available in your language yet.
Jedis 是 Redis 的 Java 客户端。当前版本把命令建模、RESP 协议、连接提供者和集群路由拆开,既保留轻量单连接 API,也支持池化、Pipeline、事务和 Cluster。
本册问题地图
Section titled “本册问题地图”Jedis 的阅读重点是“连接所有权 + 集群拓扑 + 命令时序”:
- 为什么普通连接通常不应跨线程共享? 连接内部有读写状态和协议响应顺序;连接池解决的是借用隔离,不是让同一个连接变成无状态对象。
- Pipeline 与事务分别延迟什么? Pipeline 批量发送并集中读取响应,事务把命令放入 Redis 事务队列并在 EXEC 时执行,二者不能混为一谈。
- 集群路由先做什么? 根据 key 计算 slot,再从拓扑缓存选择节点;MOVED 表示映射需要更新,ASK 表示本次请求临时跟随迁移。
- 为什么重试次数不是万能药? 拓扑过期、跨 slot、连接失效和命令已执行但响应丢失,分别需要刷新映射、拆分 key、重建连接或业务幂等。
- 客户端缓存解决什么? 它减少重复读取,但缓存失效和拓扑变化仍要有明确的回退路径。
| 项 | 值 |
|---|---|
| 仓库 | redis/jedis |
| 本地路径 | E:\source\java\storage\jedis |
| 分支 | master |
| Commit | ccfc0809fcb5ad7d4a8ca6819d16ea5baa6574fc(2026-08-13) |
| 最近 tag | v8.0.0 |
本册坐标均基于上述 commit;上游演进后行号可能漂移。
| 模块 | 职责 | 关键类 |
|---|---|---|
| 命令层 | 类型安全参数与返回值构造 | CommandArguments、CommandObject、CommandObjects |
| 连接层 | Socket、认证、读写和状态 | Connection、Protocol |
| 客户端层 | 单机 API 与统一 API | Jedis、UnifiedJedis |
| 资源层 | 连接复用与生命周期 | ConnectionFactory、ConnectionPool |
| 路由层 | Cluster slot、重试与多节点执行 | ClusterConnectionProvider、JedisCluster |
UnifiedJedis#executeCommand,看公共 API 如何下沉到命令对象。Connection#executeCommand,看发送前 hook、写请求和读响应。Protocol#sendCommand/process,看 RESP 编码与类型分派。ConnectionFactory和ConnectionPool,看池化资源如何创建、验证、销毁。ClusterConnectionProvider,看 slot 路由、重定向和故障恢复。
| 对象 | 对照点 |
|---|---|
| Redisson | Jedis 更接近 Redis 协议和连接,Redisson 在其上提供对象与分布式同步抽象 |
| HikariCP | 都把资源借用与生命周期分离;Jedis 连接池委托 Apache Commons Pool |
| Redis | Jedis 负责客户端协议与路由,Redis 负责服务端事件循环和数据结构 |