redis通信协议及手写php客户端

2020-08-30  本文已影响0人  PurelightMe

Redis通信协议+php(socket扩展)写客户端

Redis协议

Redis客户端和服务端之间使用一种名为RESP(REdis Serialization Protocol)的二进制安全文本协议进行通信。RESP设计的十分精巧,下面是一张完备的协议描述图:

13.1.png
举例说明

用SET命令来举例说明RESP协议的格式。

redis> SET age 20
"OK"

实际发送的请求数据:

*3\r\n$3\r\nSET\r\n$3\r\nage\r\n$2\r\n20\r\n

实际收到的响应数据:

+OK\r\n
下面用php写客户端
<?php

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

$con = socket_connect($socket, '127.0.0.1', '6379');

var_dump($con);

$msg = "*2\r\n$4\r\nkeys\r\n$1\r\n*\r\n\r\n";

$num = 0;
$length = strlen($msg);
do {
    $buffer = substr($msg, $num);
    $ret = @socket_write($socket, $buffer);
    $num += $ret;
} while ($num < $length);

$ret = '';
do {
    $buffer = @socket_read($socket, 1024, PHP_BINARY_READ);
    $ret .= $buffer;
} while (strlen($buffer) == 1024);

socket_close($socket);

var_dump($ret);

仅测试了keys *命令的情况,实际使用过程中需要封装更多的命令,还是使用轮子比较方便,不过了解原理还是有帮助~

Telnet测试
13.2.png

2020-03-26

上一篇 下一篇

猜你喜欢

热点阅读