一、set方法

1,先去调用底层的connect方法,去进行一个socket连接






redis 源码 解析 redis源码分析_数据


connect



从源码中可以看到是通过CP协议与redis建立socket连接,此时可以将redis理解为一个serverSocket。
2.手写模拟一个redis

public class ServerSocketRedis {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(6378);
        Socket rec = serverSocket.accept();
        byte[] result = new byte[2048];
        rec.getInputStream().read(result);
        System.out.println(new String(result));
    }
}

然后通过一个测试类向其set一条数据

public class TestRedis {
    public static void main(String[] args) {
        Jedis jedis  = new Jedis("127.0.0.1",6378);
        jedis.set("jinping","123");
        jedis.close();
    }
}

虽然在客户端报了错,但是在serverSocket端可以看到如下信息:




redis 源码 解析 redis源码分析_redis 源码 解析_02


serverSocket端输出信息



这个东西是resp传输报文的协议,这个协议是一个非常简单的协议,向redis中提交数据是通过resp协议去实现的
resp协议其实就是对传输的数据的一个封装,描述其数据信息

3                 代表有三组数据:set key value
$3               代表对第一组数据的修饰(长度)
SET
$7               第二个字符串的长度
jinping
$3               第三个字符串 的长度
123