redis通信协议resp笔记
redis 速度快,一方面是纯内存+单线程处理,纯内存保证增删改查都是内存操作,比较快;单线程避免了多线程加解锁带来的竞争,另一方面也得益于redis的序列化/反序列化协议RESP:REdis Serial Protocol。
具体参考:https://mp.weixin.qq.com/s/MtvEf_jWWDb6yCXPqvqF0w
比如set k1 v1, 序列化为
*3
$3
set
$2
k1
$2
v1
解析时,首先用strings.split("\r\n")分隔(实际是字符串扫描,遇到\r\n提取当前的字符),第一个代表命令的个数,后续每两行代表命令长度和命令内容。
用nc命令验证:
echo -e '2\r\n$3\r\nget\r\n$2\r\nk1\r\n3\r\n$3\r\ndel\r\n$2\r\nk1\r\n$2\r\nv1\r\n*2\r\n$3\r\nget\r\n$2\r\nk2\r\n'|nc localhost 6379
用\r\n太不可读,可以先echo -e '' 到文件,然后cat file|nc localhost 6379, file格式如下: 共执行了5条命令

nc也可以查看发送的数据
nc -l 6378`
redis pipeline: https://redis.io/topics/pipelining

浙公网安备 33010602011771号