redis-py 与 redis 服务器通信
最近学习网络编程,为了解其实际应用场景,本文分析 redis-py 与 Redis 服务器通信的问题。
如何与 redis 服务器通信
类似浏览器与 web 服务器通信使用 HTTP 协议。跟据 Redis 协议规范, Redis 客户端使用 RESP 与服务器进行通信。 RESP 是 Redis 所特有的协议,使用 TCP 或 Unix Socket 进行通信。
RESP 具体的规定如下
一共有 5 种数据类型。
使用第一个字符标识数据类型
类型 | 字符 |
---|---|
简单字符串 | + |
错误 | - |
整型 | : |
批量字符串 | $ |
列表 | * |
不同数据类型使用 “\r\n”(CRLF) 结尾。
每个数据类型的说明
- 简单字符串
许多 Redis 命令在成功时返回 “OK” : “+OK\r\n” - 错误
基本格式是: “-Error message\r\n” - 整型
“:0\r\n” - 批量字符串
“$6\r\nfoobar\r\n” - 列表
“*2\r\n$3\r\nfoo\r\n$3\r\nbar\r\n”
具体通信过程演示
以下使用 IPython 执行操作命令,并通过 Wireshark 抓包,以便查看具体通信过程。
注意, Wireshark 中左边显示的 0d 0a
就是 ‘\r\n’ 的 ASCII 码值。
给 key1 插入数据 value1
自增 key1 的值,引发一个错误(因为 key1 的值不可自增)
查询 key1 是否存在
获取 key1 的值