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中资源不够的时候)(让我冷静一下!!!!!!!!!!!)