深入理解客户端篇之 Jedis

一. 概述
在早期与 redis 服务交互时,使用的官方提供的 jedis 包。现在针对 jedis 客户端是如何与 redis 交互的相关代码进行梳理。
二. Jedis
2.1 简单版
一个简单版本的客户端,流程图如下:

2.2 事务版本

2.3 连接池版

连接池的原理是借用 commons-pool 包的连接池。具体的逻辑在后续单独介绍。
2.4 其他
在 redis 部署架构中有主从,哨兵,以及集群部署,也有对应的类对象来承载。但最终都会流转到 jedis 对象与 redis 交互。具体的类图关系如下:

ShardedJedisPool——redis 集群,通过对 key 进行 hash 算法选出对应的 jedis 客户端。
JedisCluster——redis 集群,通过槽的方式选出对应的 jedisPool 对象,从而获取到对应的 jedis 客户端。
JedisSentinelPool——哨兵部署,其通过定时任务去检测哨兵服务,定时刷新目标 IP。
三. Spring Jedis
spring 的 jedis 客户端是一个适配模式,其最终还是流转到上面介绍的对象去与 redis 交互。
其交互与《Redis 篇之协议与序列化》中的时序图有所类似。

版权声明: 本文为 InfoQ 作者【邱学喆】的原创文章。
原文链接:【http://xie.infoq.cn/article/2ae7bd6129d166786ffeccf07】。文章转载请联系作者。
评论