Jedis简单分析 - wtstengshen/blog-page GitHub Wiki

Jedis是一个操作redis的java client,提供了很好的封装和实现,下边是 记录学习Jedis的一些总结; #####1,Jedis是如何和Redis进行交互的 无论是什么样子的系统,想和他进行交互,就必须有协议这个东西,有了协议,系统和系统之间,人和系统之间都可以进行交互了,和Redis进行交互也是这个道理,首先Jedis和redis的交互是基于TCP协议的,规定了一套[redis Protocol][1],使Client和Redis Server进行交互; Jedis提供了操作redis命令的API,使用这些API可以和redis进行交互,里边的交互过程是 Jedis和redis Server建立TCP连接,通过Protocol和server进行交互; 举个例子,我们自己动手写一个Client发送一条set命令

Socket socket = new Socket("127.0.0.1", 6379);
String command = "*3\r\n$3\r\nset\r\n$5\r\nhello\r\n$5\r\nworld\r\n";
OutputStream out = socket.getOutputStream();
out.write(command.getBytes());
out.flush();

其实很简单,建立TCP连接,按照redis协议把名称发送到server端,然后就可以了,其中command变量里的内容就是redis的一个简单规定的协议,实现的效果是执行命令 set hello 'world'; #####2,Jedis的主要API结构 Jedis的github上提供了一些使用Jedis API的例子,最简单的如下:

Jedis jedis = new Jedis("127.0.0.1",6379);
jedis.set("hello", "world");
String value = jedis.get("hello");
System.out.println(value);
jedis.close();

使用Jedis提供的API可以很简单的进行命令交互;

public class Jedis extends BinaryJedis 
    implements JedisCommands, MultiKeyCommands,
    AdvancedJedisCommands, ScriptingCommands, BasicCommands, 
    ClusterCommands, SentinelCommands

Jedis类是我们主要使用的一个类; 1,首先实现了一大堆接口,这些接口主要是一些redis的命令;继承BinaryJedis类; 2,在BinaryJedis类中组合了Client类,这个Client就是和redis servier建立TCP连接然后发送命令; 3,Client类继承BinaryClient,BinaryClient中又继承了Connection类 4,Connection类负责TPC的建立/断开连接,命令的发送和读取,它又组合了Protocol类,负责标准协议的解析。 结构图如下: Jedis

#####3,Jedis中的Connection类 我认为Jedis中的Connection类是里边最重要的一个类,他负责和redis Server的Scoket交互,负责发送数据和接受数据; inputStream对输入输出流进行包装处理;所有的网络请求底层全部都是Scoket,对Socket的输入输出,Jedis实现了 RedisOutputStream和RedisInputStream,很好的封装了输入输出流; Protocol类提供了对上边说的协议的解析功能,整体的网络交互结构很清楚; Connection

后续对Jedis的主要进行进行详细分析,本篇完;

作者 [@悠悠小竹子][1001] 博客 [iocoding][1002] [1001]: https://github.com/wtstengshen/blog-page [1002]: http://blog.iocoding.com [1]: http://redis.io/topics/protocol