以前只会用redis -cli客户端, 或者在java程序里使用jedis来作为介质与redis服务器通信.这两天正好在实习中解除了一点这方面的内容. 五一放假就稍微翻了翻redis相关资料.
本篇博客一来是给自己整理笔记,二来是给学校的同学们分享: 面向于使用过redis, 但只是停留在基本set get的命令, 不了解其中原理的同学.
介绍redis的ping pong
首先介绍一下ping pong.. (有同学不懂..我就再加上ping pong的介绍吧)
登录redis cli客户端后, 输入ping, 服务器会返回pong, 来表示连接状况是完好的, 也表示了服务器大体上是正常运转的.
其中的第一行是我用docker 启动的客户端, 大家如果不是docker的话, 自己正常启动redis -cli就行..
ping之后就会收到pong
使用Java socket 来实现 Redis 的ping pong
抄代码的时候大家良心一点...不要去用我的ip去试...(非要拿我的试也没关系...因为我已经偷偷改掉一位数了)
public static void main(String[] args) throws Exception { // socket Socket socket = new Socket("140.143.135.210", 6379); // oi流 OutputStream os = socket.getOutputStream(); InputStream is = socket.getInputStream(); // 向redis服务器写 os.write("PING\r\n".getBytes()); //从redis服务器读,到bytes中 byte[] bytes = new byte[1024]; int len = is.read(bytes); // to string 输出一下 System.out.println(new String(bytes,0,len)); }
返回的结果如下:
问: 为什么会有一个 '+'符号 呢? redis -cli里是没有这个加号的呀? 答:这个和通信协议有关, 一会儿再介绍具体的含义. 不过redis -cli只是把这个'+'符号吞掉处理了, 没显示出来罢了. 如果这么说还不理解的话......看下面代码...
public static void main(String[] args) throws Exception { // socket Socket socket = new Socket("140.143.135.210", 6379); // oi流 OutputStream os = socket.getOutputStream(); InputStream is = socket.getInputStream(); // 向redis服务器写 os.write("PING\r\n".getBytes()); //从redis服务器读,到bytes中 byte[] bytes = new byte[1024]; if(is.read()=='+'){ // to string 输出一下 int len = is.read(bytes); System.out.println(new String(bytes,0,len)); } // else if $ // else if * // else }
这样就跟redis -cli里的一样啦.就只是pong了
ps: 不是我逗大家玩....jedis在在协议层也是类似于这样的写法, 把$ * + 这几个符号挨个判断来确定传输内容的含义的...