基于jedis 2.2.0-SNAPSHOT redis
首先是对输入输出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)三个方法。 服务器