1,Redis通信协议
1)基本特征
client与server使用tcp通信
不同数据类型根据请求/响应的第一个字节区分
字符串不能包含\r\n
2)RESP协议的5中数据类型
第一个字节
+表示简单字符串 simple strings
eg:"+OK\r\n"
第一个字节
-表示信息errors
eg: "-Error msg \r\n"
第一个字节
:表示整数integers
eg: ":100\r\n"
第一个字节
$表示批量字符串bulk strings
第一个字节
*表示数组arrays
3)redis发送命令的格式
命令本身也作为参数
每一段数据使用\r\n区分
以 * 数据表示开头
4)redisClient例子
set命令
info命令
2,简单的redis客户端
package com.immomo.moaservice.live.roulette.impl.resource.delegate;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
/**
* Created by zq on 2019/1/9.
*/
public class RedisCli {
private static InputStream in;
private static OutputStream out;
public RedisCli(String host, int port) throws Exception{
Socket socket = new Socket(host, port);
in = socket.getInputStream();
out = socket.getOutputStream();
}
public static String set(String key, String value) throws Exception{
StringBuffer data = new StringBuffer();
data.append("*3").append("\r\n");
data.append("$3").append("\r\n");
data.append("set").append("\r\n");
data.append("$").append(key.getBytes().length).append("\r\n");
data.append(key).append("\r\n");
data.append("$").append(value.getBytes().length).append("\r\n");
data.append(value).append("\r\n");
out.write(data.toString().getBytes());
byte[] res = new byte[1024];
in.read(res);
return new String(res);
}
public static void main(String[] args) throws Exception{
RedisCli redisCli = new RedisCli("127.0.0.1", 6379);
System.out.println(set("qqq", "111"));
}
}