二、Redis源码解析

一、set方法

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


15200008-1713cfda95baec22.png
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端可以看到如下信息:


15200008-8db0250a94908ec9.png
serverSocket端输出信息

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值