使用 Java 创建 redis 客户端( 基本 Jedis) 。

      最后更新:2021-12-07 08:48:10 手机定位技术交流文章

      默认情况下, redis 服务器通过6379 端口连接到外部世界, 我们也可以自己创建一个基本的 redis 客户端。 这是一些 Java 代码 。
      创建再置客户端需要两个主要组成部分。

      1. socket通信
      2. 重新发布通讯协议( resp 协议)编码和解码

      这主要是执行第二部分,这是对第二部分的简要概述。
      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 命令 。
      截屏20211206 下午11.56.38.png

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/14419.html

          热门文章

          文章分类