Jedis源码解析(一)-------Jedis与JedisPool

1 主要类的结构

1.1 Jedis类的结构
这里写图片描述

1.2 Client类的结构
这里写图片描述

2 Send Command

这里写图片描述

[*号][消息元素个数]\r\n ( 消息元素个数 = 参数个数 + 1个命令)
[][]\r\n[]\r\n[ 号][参数字节个数]\r\n
[参数内容]\r\n
[$号][参数字节个数]\r\n
[参数内容]\r\n
返回值读取:
这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

3 Jedis与Redis Server的连接

和Redis Sever的Socket通信是由 redis.clients.jedis.Connection 实现的
Connection 中维护了一个底层Socket连接;
I/O Stream:RedisOutputStream与RedisInputStream,I/O Stream是在Connection中Socket建立连接后获取并在使用时传给Protocol的
(1)如何建立与redis server的连接
这里写图片描述

可以看到,Jedis与Redis之间的通信就是使用一个基本的Socket。
(2)如何断开与redis server的连接
这里写图片描述

4 JedisPool

(1)JedisPool的结构

这里写图片描述
其中Pool是通过 Apache Commons Pool 中的GenericObjectPool这个对象池来实现的(我槽勒,你狠,http://phil-xzh.iteye.com/blog/320983)。

(2) JedisPool初始化

在JedisPool中,实现了一个符合 Apache Commons Pool 相应接口的JedisFactory(JedisFactory实现了commons下面PooledObjectFactory接口),GenericObjectPool就是通过这个JedisFactory来产生Jedis实例的。
这里写图片描述

(3) 从JedisPool获取Jedis和释放Jedis实例

这里写图片描述
当调用 getResource 获取Jedis时, 实际上是Pool内部的internalPool调用borrowObject()拿到一个实例 ,而internalPool 这个 GenericObjectPool 又调用了 JedisFactory 的 makeObject() 来完成实例的生成 (在Pool中资源不够的时候)(让我冷静一下!!!!!!!!!!!)
这里写图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章