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中资源不够的时候)(让我冷静一下!!!!!!!!!!!)
这里写图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值