用于micropython的一个非常小的python redis客户端库(不仅如此)
picoredis的Python项目详细描述
概述
picoredis是micropython的最小redis客户端(不仅如此)。
什么是
- 支持rediss序列化p协议 (RESP)。
- 通过TCP连接到Redis服务器。
- 发送Redis commands并接收 以简单的阻塞方式解析响应。
- 支持micropython(带有usocket和 uselect模块)、cpython和pypy(3.4+,2.7+未测试)。
它不
- 分析除基本resp类型的反序列化之外的响应 (simple string,error,bulk string,integer和 array)。
- 解码响应字节字符串,错误消息除外。
- 支持订阅/发布协议。
- 支持ssl/tls(yet)。
- 异步I/O。
用法
>>>frompicoredisimportRedis>>>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(mostrecentcalllast):File"<stdin>",line1,in<module>File"picoredis.py",line72,in<lambda>File"picoredis.py",line66,indo_cmdFile"picoredis.py",line82,in_read_responseRedisError:('ERR',"unknown command 'bogus'")
连接
创建Redis实例时,它会立即尝试打开 正在连接到redis服务器。默认的主机和端口是 ^分别是{tt17}$和6379。
可以设置redis的主机名、ip地址和端口号 连接到host和port关键字参数的服务器:
>>>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)
可以使用timeout关键字参数设置TCP套接字超时 毫秒(默认值3000):
>>>redis=Redis(timeout=10000)
如果从服务器读取响应而服务器不返回任何 在超时时间内,将引发RedisTimeout异常。
要关闭与服务器的连接,请使用close()方法:
>>>redis.close()>>>redis.ping()Traceback(mostrecentcalllast):File"<stdin>",line1,in<module>File"picoredis.py",line89,in<lambda>File"picoredis.py",line75,indo_cmdRedisError:Notconnected:use'connect()'toconnecttoRedisserver.
要再次打开新连接,请使用connect方法。你可以通过 不同的主机名和/或端口号将覆盖 创建实例时给出的值:
>>>redis.connect('redis.myserver.com')>>>redis._host'redis.myserver.com'
调试输出
打开从redis发送和接收的原始消息的打印 创建实例或设置其 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服务器支持的命令列表,作为 字符串:
>>>classMyRedis(Redis):...defcommand_list(self):...returnsorted([cmd[0].decode('utf-8')...forcmdinself.do_cmd('command')])>>>redis=MyRedis()>>>redis.command_list()['append','asking','auth','bgrewriteaof','bgsave','bitcount','bitfield',...,'zunionstore']
警告:对该命令的响应是redis服务器将 当您在 内存受限设备,如基于ESP8266的板。
安装
在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.mpy文件作为替换项 对于纯python版本。这会帮你省下不少记忆 你的micropython板,因为字节码编译步骤, 通常在导入模块时发生,可以跳过:
$ mpy-cross picoredis.py $ ampy -p /dev/ttyUSB0 put picoredis.mpy