10分钟写出JAVA最精简Redis客户端

前言

JAVA开发人员出去面试,基本是必问Redis。

Redis分为客户端和服务端两个部分,这次就是通过手写一个Redis的客户端,让你掌握里面的知识。

RESP协议

RESP协议是Redis客户端和服务端之间的通讯协议,这是它的官方文档:https://redis.io/topics/protocol。

我就是根据这个协议来实现客户端的。

协议几个要点:

1、客户端和服务端通过TCP进行数据交互

2、 传输的数据遵循RESP协议,如下:

每一段数据通过 进行分隔,每段数据通过一个特殊标志作为开头

* 代表数组

$ 多行字符串

+ 单行信息

- 错误信息

: 整型数字

不能理解没关系,看完我的示例,你自己多练几把就明白了。

客户端步骤1 - 建立TCP连接

 
 
  1. import java.io.IOException;

  2. import java.io.InputStream;

  3. import java.io.OutputStream;

  4. import java.net.Socket;

  5. import java.net.UnknownHostException;

  6. /** 自己实现Redis客户端 */

  7. public class RedisClient {

  8.    // 往外写数据

  9.    OutputStream outputStream;

  10.    // 读取服务端返回的数据

  11.    InputStream inputStream;

  12.    // 1、 客户端和服务端是通过tcp网络连接

  13.    public RedisClient(String host, int port) throws Exception {

  14.        // 建立 java客户端和Redis服务端的一个连接

  15.        Socket socket = new Socket(host, port);

  16.        // 往外写数据

  17.        outputStream = socket.getOutputStream();

  18.        // 读取服务端返回的数据

  19.        inputStream = socket.getInputStream();

  20.    }

  21. }

客户端步骤2 - 实现set/get命令

 
 
  1. // set key value

  2. public void set(String key, String value) throws Exception {

  3.    // 1、 组装数据

  4.    StringBuffer data = new StringBuffer();

  5.    data.append("*3").append("\r\n");

  6.    data.append("$3").append("\r\n");

  7.    data.append("SET").append("\r\n");

  8.    data.append("$").append(key.getBytes().length).append("\r\n");

  9.    data.append(key).append("\r\n");

  10.    data.append("$").append(value.getBytes().length).append("\r\n");

  11.    data.append(value).append("\r\n");

  12.    // 2、 把指令数据发给Redis服务端

  13.    outputStream.write(data.toString().getBytes());

  14.    System.out.println("发送成功:");

  15.    System.out.println(data);

  16.    // 3、 接收服务端响应

  17.    byte[] response = new byte[1024];

  18.    inputStream.read(response);

  19.    System.out.println("接收到响应:" + new String(response));

  20. }

客户端步骤3 - 测试

 
 
  1. public static void main(String[] args) throws Exception {

  2.    RedisClient redisClient = new RedisClient("127.0.0.1", 6379);

  3.    redisClient.set("Hello", "Tony");

  4.    redisClient.get("Hello");

  5. }

重要的是思路,希望对你有启发。

JAVA学习不易,不要好高骛远,需要沉下心系统性的学习。重要的是思路,希望对你有启发。

640?wx_fmt=png


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值