Redis学习之Jedis源码原理分析探究(BIO手写Jedis客户端)
在Redis的使用过程中,大多数人都是使用现成的客户端,如Jedis,Redisson,Lettuce。因此本文研究用BIO的方式手写Redis客户端尝试,对遇到的问题进行探究及总结。 如何从架构角度思考架构分层? Redis通讯协议RESP是怎么回事? 如何基于BIO实现Redis客户端? Redis客户端通讯线程安全问题如何解决? 一、Jedis客户端如何进行架构分层 要进行远程访问,如下图所示: 我们在Java应用程序的客户端通过访问包装的API进行Redis访问,API使我们直接可以看懂的调用入口; 然后API是对Redis通信协议的包装,通过对协议的包装,实现我们对Redis访问协议的透明使用; 协议是按照一定规则组装的数据,并不能直接用于网络IO,所以必须进行序列化和反序列化,这样才能进行远程Redis的请求调用以及返回数据的处理。 二、传输层通信 基于远程访问,我们可以使用BIO的Socket进行通信,首先定义一个Connection,Connection类包含了建立BIO连接的远程地址host,端口port,套接字Socket以及输入输出流。 此类一个Connection的构造方法,一个Connection的初始化方法,以及请求发送方法。 public class Connection { private