【jedis的源码理解-基础篇】【http://my.oschina.net/u/944165/blog/127998】
(关注实现关键功能的类)
 
基于jedis 2.2.0-SNAPSHOT
        首先是对输入输出Stream进行了包装生成出两个类redis.clients.util.RedisOutputStream 和 redis.clients.util.RedisInputStream。这两个类极大的简化了IO操作的操作。 
    redis.clients.util.RedisInputStream 
    根据redis协议的特点提供了 
    1. 按位读 public byte readByte() 
    2. 按行读 public String readLine() 
    3. 按偏移量读 public int read(byte[] b, int off, int len) 
    以上操作基本满足了对流的解析工作。

redis.clients.util.RedisOutputStream 
    根据redis协议的特点提供了 
    1. 将一个整型转化为对应的ascii流输出,并加入换行回车。其实对应的就是按行写入 public void writeIntCrLf(int value) 
    2. 写入一位 public void write(final byte b) 
    3. 写入一个数组 public void write(final byte[] b) 
    4. 按照偏移量写入 public void write(final byte b[], final int off, final int len) 
    5. 写入换行和回车,即一行结束,要与上面的命令结合起来就无敌了。public void writeCrLf() 
     
     
    针对Redis的协议有一个通用的工具类 
    redis.clients.jedis.Protocol,包括发送命令的方法,和接受命令的方法。

最基础的客户端 redis.clients.jedis.Connection 
    一个Connection已经就是一个最最基础的客户端,包括三个基本元素,一个Socket, 和一个RedisOutputStream和一个RedisInputStream。 
    其中Socket主要与服务端建立真正的网络链接,获得InputStream和OutputStream 
    RedisOutputStream和RedisInputStream主要对InputStream和OutputStream进行包装,提供基本的读写操作。

另外增加各种协议层次的发送命令和收取结果的方法,都是通过Protocol类的操作RedisOutputStream和RedisInputStream完成的。

最基本的客户端Connection 要发送什么命令给服务器,还需要自己根据枚举类型自己传递,自然想到可以把自定义封装成方法,并且增加了对byte数组形式的支持,从而出现了以下命令。

Connection ----  BinaryClient   ---- Client
最基本的客户端   二进制版            普通字符串版

基本可用的客户端有了,又在这个基础上形成了最常用的类BinaryJedis 和 Jedis。

但是一个客户端是单线程,当Jedis被很多实例调用时自然就不够用,此时就需要考虑使用池子。

Jedis这里使用Apache 的Pool。实现起来也是很简单。其内部就是 GenericObjectPool 对象,将jedis保存在其中。

另外就是需要有个Factory来生成Jedis对象。这个Factory是JedisPoll类的一个内部类JedisFactory继承自BasePoolableObjectFactory。重写了makeObject(),destroyObject(final Object obj),validateObject(final Object obj)三个方法。

jedis的源码理解-基础篇的更多相关文章

  1. 鸿蒙内核源码分析(VFS篇) | 文件系统和谐共处的基础 | 百篇博客分析OpenHarmony源码 | v68.01

    子曰:"质胜文则野,文胜质则史.文质彬彬,然后君子." <论语>:雍也篇 百篇博客系列篇.本篇为: v68.xx 鸿蒙内核源码分析(VFS篇) | 文件系统和谐共处的基 ...

  2. jQuery2.x源码解析(设计篇)

    jQuery2.x源码解析(构建篇) jQuery2.x源码解析(设计篇) jQuery2.x源码解析(回调篇) jQuery2.x源码解析(缓存篇) 这一篇笔者主要以设计的角度探索jQuery的源代 ...

  3. JUC源码分析-集合篇(一)ConcurrentHashMap

    JUC源码分析-集合篇(一)ConcurrentHashMap 1. 概述 <HashMap 源码详细分析(JDK1.8)>:https://segmentfault.com/a/1190 ...

  4. 鸿蒙内核源码分析(文件句柄篇) | 深挖应用操作文件的细节 | 百篇博客分析OpenHarmony源码 | v69.01

    百篇博客系列篇.本篇为: v69.xx 鸿蒙内核源码分析(文件句柄篇) | 深挖应用操作文件的细节 | 51.c.h.o 文件系统相关篇为: v62.xx 鸿蒙内核源码分析(文件概念篇) | 为什么说 ...

  5. 鸿蒙内核源码分析(文件系统篇) | 用图书管理说文件系统 | 百篇博客分析OpenHarmony源码 | v63.01

    百篇博客系列篇.本篇为: v63.xx 鸿蒙内核源码分析(文件系统篇) | 用图书管理说文件系统 | 51.c.h.o 文件系统相关篇为: v62.xx 鸿蒙内核源码分析(文件概念篇) | 为什么说一 ...

  6. 鸿蒙内核源码分析(fork篇) | 一次调用,两次返回 | 百篇博客分析OpenHarmony源码 | v45.03

    百篇博客系列篇.本篇为: v45.xx 鸿蒙内核源码分析(Fork篇) | 一次调用,两次返回 | 51.c.h .o 进程管理相关篇为: v02.xx 鸿蒙内核源码分析(进程管理篇) | 谁在管理内 ...

  7. 鸿蒙内核源码分析(寄存器篇) | 小强乃宇宙最忙存储器 | 百篇博客分析OpenHarmony源码 | v38.02

    百篇博客系列篇.本篇为: v38.xx 鸿蒙内核源码分析(寄存器篇) | 小强乃宇宙最忙存储器 | 51.c.h .o 硬件架构相关篇为: v22.xx 鸿蒙内核源码分析(汇编基础篇) | CPU在哪 ...

  8. 鸿蒙内核源码分析(CPU篇) | 整个内核就是一个死循环 | 祝新的一年牛气冲天 ! | v32.02

    百篇博客系列篇.本篇为: v32.xx 鸿蒙内核源码分析(CPU篇) | 整个内核就是一个死循环 | 51.c.h .o 任务管理相关篇为: v03.xx 鸿蒙内核源码分析(时钟任务篇) | 触发调度 ...

  9. 鸿蒙内核源码分析(定时器篇) | 哪个任务的优先级最高 | 百篇博客分析OpenHarmony源码 | v31.02

    百篇博客系列篇.本篇为: v31.xx 鸿蒙内核源码分析(定时器篇) | 哪个任务的优先级最高 | 51.c.h .o 本篇说清楚定时器的实现 读本篇之前建议先读鸿蒙内核源码分析(总目录)其余篇. 运 ...

随机推荐

  1. asp.net mvc4连接mysql

    环境:vs2013+mysql5.6+mysql connector for .net 6.8.3+MySQL for Visual Studio 1.1.3 参考:http://dev.mysql. ...

  2. Java 自带的加密类MessageDigest类(加密MD5和SHA)

    Java 自带的加密类MessageDigest类(加密MD5和SHA) - X-rapido的专栏 - CSDN博客 https://blog.csdn.net/xiaokui_wingfly/ar ...

  3. P2P-BT对端管理协议(附BT协议1.0)

    对端管理 指的是远端peer集合的管理(尽管自身client也能够视为一个peer.但对端管理不包括自身peer) 一个client(client)必须维持与每一个远程peer连接的状态信息,即1V1 ...

  4. Js算两经纬度间球面距离

    function GetDistance( lat1, lng1, lat2, lng2){ var radLat1 = lat1 * Math.PI / 180.0 var radLat2 = la ...

  5. Dockerfile学习(二)

    这节学习制作一个ssh镜像服务. 创建sshtest目录,进入到该目录中. 假如允许主机B上的root用户可以通过SSH登录到容器内部,那么首先要在B主机上通过ssh-keygen -t rsa命令生 ...

  6. 查看连接MYSQL数据库的IP信息

    要统计数据库的连接数,我们通常情况下是统计总数,细分到每个ip地址: 方法一: ) as ip , count(*) from information_schema.processlist group ...

  7. 去重除了indexOf的其他方法(使用对象Key的方法)及统计重复次数

    1.去重: 法1:使用数组IndexOf去重 法2:使用对象Key: <script> var arr1 = [1,13,24,11,11,14,1,2]; let unique = fu ...

  8. android camera jni调用

    http://www.mamicode.com/info-detail-1002139.html how to compile  library of native camera for androi ...

  9. JSP笔记05——生命周期(转)

    原始内容:https://www.tutorialspoint.com/jsp/jsp_life_cycle.htm 在这一章中,我们将讨论JSP的生命周期. 理解JSP低层次功能的关键在于——理解它 ...

  10. Docker容器技术-自动化部署

    一.用Chef自动化部署Docker 1.为什么需要自动化部署? Docker引擎需要配置很多参数(cgroups.内存.CPU.文件系统等) 识别Docker容器运行在哪个宿主机上 耗时且容易出错, ...