一个非常简单的MicroPython Redis客户端库(不仅限于)
项目描述
概述
PicoRedis 是一个非常简单的MicroPython Redis客户端库。
它做什么
支持Redis Redis Serialization Protocol (RESP).
通过TCP连接到Redis服务器。
发送Redis命令并以简单、阻塞的方式接收和解析响应。
支持MicroPython(带有usocket和uselect模块的Unix和裸机端口)、CPython和PyPy(3.4+,2.7+未测试)。
它不做什么
解析响应超出基本RESP类型的反序列化(简单字符串、错误、批量字符串、整数和数组)。
解码响应字节数组,除了错误消息。
支持订阅/发布协议。
支持SSL/TLS(尚未)。
异步I/O。
用法
>>> from picoredis import Redis
>>> redis = Redis() # server defaults to 127.0.0.1 port 6379
>>> redis.do_cmd('PING', 'Hello World!')
b'Hello World!'
与使用 do_cmd 方法不同,可以直接调用 Redis 实例
>>> redis('SET', 'foo', 'bar')
b'OK'
>>> redis('GET', 'foo')
b'bar' # string responses are always byte strings
或者您可以在 Redis 实例上调用任意方法,方法名将被用作 Redis 命令
>>> redis.hset('myhash', 'key1', 42)
1
>>> redis.hkeys('myhash')
[b'key1']
您可以使用任何只包含字母的方法名,但不能是 connect、close、debug(以及 do_cmd),这些已经被用作实例属性或方法名。如果名称与有效 Redis 命令不匹配,服务器将返回错误,并引发 RedisError 异常
>>> redis.bogus('spam!')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "picoredis.py", line 72, in <lambda>
File "picoredis.py", line 66, in do_cmd
File "picoredis.py", line 82, in _read_response
RedisError: ('ERR', "unknown command 'bogus'")
连接
当您创建一个 Redis 实例时,它立即尝试连接到 Redis 服务器。默认主机和端口分别是 127.0.0.1 和 6379。
您可以使用 host 和 port 关键字参数设置要连接的 Redis 服务器的主机名或 IP 地址和端口号
>>> redis = Redis('192.168.1.100')
>>> redis = Redis(port=6380)
>>> redis = Redis('192.168.1.100', 6380)
>>> redis = Redis(host='192.168.1.100')
>>> redis = Redis(host='192.168.1.100', port=6380)
您可以使用毫秒(默认 3000)作为 timeout 关键字参数设置 TCP 套接字超时
>>> redis = Redis(timeout=10000)
如果从服务器读取响应,并且服务器在超时时间内没有返回任何数据,将引发 RedisTimeout 异常。
要关闭与服务器的连接,请使用 close() 方法
>>> redis.close()
>>> redis.ping()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "picoredis.py", line 89, in <lambda>
File "picoredis.py", line 75, in do_cmd
RedisError: Not connected: use 'connect()' to connect to Redis server.
要再次打开新的连接,请使用 connect 方法。您可以传递不同的主机名和 / 或端口号,它们将覆盖实例创建时给出的那些
>>> redis.connect('redis.myserver.com')
>>> redis._host
'redis.myserver.com'
调试输出
要打开打印发送到和从 Redis 服务器接收到的原始消息,在创建实例时传递 debug=True 或将其实例的 debug 属性设置为 True
>>> redis = Redis(debug=True)
>>> redis.hkeys('myhash')
SEND: '*2\r\n$5\r\nhkeys\r\n$6\r\nmyhash\r\n'
RECV: b'*1\r\n'
RECV: b'$4\r\n'
RECV: b'key1\r\n'
[b'key1']
技巧
如果您需要经常将响应解析为 Redis 命令,只需在子类中添加一个包装方法。例如,以下是如何获取 Redis 服务器支持的命令列表作为字符串列表的方法
>>> class MyRedis(Redis):
... def command_list(self):
... return sorted([cmd[0].decode('utf-8')
... for cmd in self.do_cmd('command')])
>>> redis = MyRedis()
>>> redis.command_list()
['append', 'asking', 'auth', 'bgrewriteaof', 'bgsave', 'bitcount', 'bitfield',
..., 'zunionstore']
警告:Redis 服务器发送的此命令响应可能相当大,并且可能在内存受限的设备(如基于 ESP8266 的板)上运行时引发 MemoryError
安装
在 CPython 和 PyPy 上,使用 pip 按照常规安装
$ pip install picoredis
在 MicroPython 上,只需从存储库中下载 picoredis.py 文件,对于 Unix 端口,将其放入您的 MICROPYPATH 目录中(通常为 ~/.micropython/lib),或者对于基础金属端口(esp8266、stm32、wipy 等)将其上传到 MicroPython 板的闪存存储中,例如使用 ampy
$ curl -O https://raw.githubusercontent.com/SpotlightKid/picoredis/master/picoredis/picoredis.py $ ampy -p /dev/ttyUSB0 put picoredis.py
您还可以使用 mpy-cross 编译 picoredis.py 模块,并使用生成的 picoredis.mpy 文件作为纯 Python 版本的替代品。这将为您在 MicroPython 板上节省大量内存,因为通常在导入模块时发生的字节码编译步骤可以跳过
$ mpy-cross picoredis.py $ ampy -p /dev/ttyUSB0 put picoredis.mpy
许可证
PicoRedis 由 Christopher Arndt 编写并享有版权,2017。
它根据 MIT 许可证分发,PicoRedis 是免费和开源软件。
致谢
从以下项目中获得了灵感和代码想法
micropython-redis by Dwight Hubbard
redis_protocol by Young King
picoredis-0.1.1.tar.gz 的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | a7e542ab07a2fd45594c27fcb9ae89df73a5dfa4d6261da3d9e3abda1f08613d |
|
MD5 | 1a740bcd07747ccd13907027d5d1e721 |
|
BLAKE2b-256 | 89a248db8eece2e89f829d3c9f8cb14f75830579fddc084933d35020d562f2b2 |
picoredis-0.1.1-py2.py3-none-any.whl 的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 795a3738312276b8d2870600d3e443835ca6c6374d436e7d44d48c6426195bba |
|
MD5 | 54dd7133b9d63a843f6e0f29efa210c4 |
|
BLAKE2b-256 | ade84bd4e30a2e2763b628518b5068acf98336c8d98d4cf10a2072b6c6525cdd |