跳转到内容

Jedis

Jedis 是 Redis 的 Java 客户端。当前版本把命令建模、RESP 协议、连接提供者和集群路由拆开,既保留轻量单连接 API,也支持池化、Pipeline、事务和 Cluster。

Jedis 的阅读重点是“连接所有权 + 集群拓扑 + 命令时序”:

  1. 为什么普通连接通常不应跨线程共享? 连接内部有读写状态和协议响应顺序;连接池解决的是借用隔离,不是让同一个连接变成无状态对象。
  2. Pipeline 与事务分别延迟什么? Pipeline 批量发送并集中读取响应,事务把命令放入 Redis 事务队列并在 EXEC 时执行,二者不能混为一谈。
  3. 集群路由先做什么? 根据 key 计算 slot,再从拓扑缓存选择节点;MOVED 表示映射需要更新,ASK 表示本次请求临时跟随迁移。
  4. 为什么重试次数不是万能药? 拓扑过期、跨 slot、连接失效和命令已执行但响应丢失,分别需要刷新映射、拆分 key、重建连接或业务幂等。
  5. 客户端缓存解决什么? 它减少重复读取,但缓存失效和拓扑变化仍要有明确的回退路径。
项 值
仓库 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
  1. UnifiedJedis#executeCommand,看公共 API 如何下沉到命令对象。
  2. Connection#executeCommand,看发送前 hook、写请求和读响应。
  3. Protocol#sendCommand/process,看 RESP 编码与类型分派。
  4. ConnectionFactory 和 ConnectionPool,看池化资源如何创建、验证、销毁。
  5. ClusterConnectionProvider,看 slot 路由、重定向和故障恢复。
对象 对照点
Redisson Jedis 更接近 Redis 协议和连接,Redisson 在其上提供对象与分布式同步抽象
HikariCP 都把资源借用与生命周期分离;Jedis 连接池委托 Apache Commons Pool
Redis Jedis 负责客户端协议与路由,Redis 负责服务端事件循环和数据结构