最后更新:2021-12-07 08:48:10 手机定位技术交流文章
默认情况下, redis 服务器通过6379 端口连接到外部世界, 我们也可以自己创建一个基本的 redis 客户端。 这是一些 Java 代码 。
创建再置客户端需要两个主要组成部分。
这主要是执行第二部分,这是对第二部分的简要概述。
RESP 协议简介
作为标准通信手段,Redis客户和服务供应商在TCP协议之外还采用独立的RESSP协议。
重新在容易实现与复杂实现之间达成平衡。
快速地被计算机解析
它是如此的基本 它可以用手做。
新的统一协议已在 Redis 1. 中推出, 但没有在 Redis 2. in 0 中引入, 这成为与 Redis 服务器通信的通常方式。 提供给 Redis 服务端的所有参数都是二进制安全 。 Redis 以不同种类的回答响应命令 。 Redis 可以检查服务器发送的第一个字节的响应类型 。 新的统一协议已经在 Redis 1. 中进行 。 它在 2 中引入, 但没有在 Redis 2. In 0 中, 这成为与 Redis 服务器通信的通常方式 。 提供给 Redis 服务端的所有参数都是二进制安全 。 Redis 以不同种类的回答响应命令 。 它可以核查服务器发送的第一个字节的响应类型 :
回答的第一个字节是单行回答中的“+”(一个行字符串回答)。
错误消息( 单独显示单行字符串响应) 响应的第一个字节是“ - ” 。
整数回答的第一个字节( Otheropaedic number 回答) 将是“ : ” 。
批量回答的第一个字节( 多线字符串回复) 将是“$ ”
若干批次答复(数组答复),第一个字节设为“*”
例如,命令集名称 ldh 实际上是一个数组, 结果是一个 resp 代码 。
*3/3,阵列长度为3.3/3,弦长度为4name $3.ldh的阵列长度为3.3/3,弦长度为4美元
服务器以 OK 真正 +OK 响应, 我们的编码和解码常规很容易定义如下:
//编码,将["set","name","ldh"] -> *3rn$3rnsetrn$4rnnamern$3rnldhrn
byte[] encode(String[] command){
}
//解码,将*3rn$3rnsetrn$4rnnamern$3rnldhrn -> ["set","name","ldh"]
String[] decode(byte[] msg){
}
我们来这里是为了实现客户的重写编码, 因为客户发送的所有信息都是数据; 客户不会向服务器发送错误, 矫形信息,或其他任何东西, 我们需要首先编码。
byte[] encode(String[] commands){
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("*").append(commands.length).append("rn");
for(String command : commands) {
stringBuilder.append("$").append(command.length()).append("rn");
stringBuilder.append(command).append("rn");
}
return stringBuilder.toString().getBytes();
}
接下来我们将构建一个基本的套接字客户端, 用我们上面的代码函数编码它, 记住在这里读的时候, 由于 Java 套接字的读取被屏蔽 **, 我们将从一条线上读取操作, 如下所示 :
public class test {
public static void main(String[] args) {
try {
Scanner in = new Scanner(System.in);
Socket socket = new Socket("127.0.0.1", 6379);
OutputStream outputStream = socket.getOutputStream();
InputStream inputStream = socket.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
while(in.hasNext()) {
String str = in.nextLine();
String[] command = str.split(" ");
outputStream.write(
encode(command)
);
outputStream.flush();
new Thread(new read(bufferedReader)).start();
}
} catch (Exception e) {
e.printStackTrace();
}
}
static byte[] encode(String[] commands){
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("*").append(commands.length).append("rn");
for(String command : commands) {
stringBuilder.append("$").append(command.length()).append("rn");
stringBuilder.append(command).append("rn");
}
System.out.println(stringBuilder);
return stringBuilder.toString().getBytes();
}
}
class read implements Runnable{
BufferedReader bufferedReader;
read(BufferedReader bufferedReader){
this.bufferedReader = bufferedReader;
}
@SneakyThrows
@Override
public void run() {
String info;
while((info = bufferedReader.readLine())!=null){
System.out.println(info);
}
}
下一步我们开始 redis 服务器, 输入 redis 服务器的 IP 和端口, 运行我们的功能, 并在此输入 设置名称 eldh 命令 。
本文由 在线网速测试 整理编辑,转载请注明出处。