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中資源不夠的時候)(讓我冷靜一下!!!!!!!!!!!)
這裏寫圖片描述

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