1 主要類的結構
1.1 Jedis類的結構
1.2 Client類的結構
2 Send Command
[*號][消息元素個數]\r\n ( 消息元素個數 = 參數個數 + 1個命令)
[
[參數內容]\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中資源不夠的時候)(讓我冷靜一下!!!!!!!!!!!)