用于micropython的一个非常小的python redis客户端库(不仅如此)

picoredis的Python项目详细描述


概述

picoredis是micropython的最小redis客户端(不仅如此)。

什么是

  • 支持rediss序列化p协议 (RESP)。
  • 通过TCP连接到Redis服务器。
  • 发送Redis commands并接收 以简单的阻塞方式解析响应。
  • 支持micropython(带有usocketuselect模块)、cpython和pypy(3.4+,2.7+未测试)。

它不

  • 分析除基本resp类型的反序列化之外的响应 (simple stringerrorbulk stringintegerarray)。
  • 解码响应字节字符串,错误消息除外。
  • 支持订阅/发布协议。
  • 支持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']

您可以使用任何仅由个字母组成的方法名,除了 connectclosedebug(和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地址和端口号 连接到hostport关键字参数的服务器:

>>>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),或者 基本金属端口(esp8266stm32wipy等)将其上载到 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

许可证

picoredis由Christopher Arndt编写,版权所有,2017年。

根据MIT licensepicoredis是免费的 以及开源软件。

致谢

从这些项目中获得了一些灵感和代码思想:

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java FSReadOnlyChiveFileSystem异常   java增量和减量不起作用   java PigLatin语句转换器方法给出了“indexoutofboundsexception”错误等   java从使用布局的页面适配器中删除特定位置页面。刷卡   api查看java源代码有任何规定的方式吗?   快速查找表中的行的java算法   web服务单击将SOAP wsdl转换为JAXB java类   java后转换完成不工作   java访问文件并只提取带注释的方法,从而进一步处理它们   java使用JDBC从SQL INSERT获取序列   java ECLIPSE:构建失败   处理对命令行的读/写操作。exe Java   java遇到过早的文件结束异常   java unity使用Xamarin吗?   java之间的区别是什么:使用JFrame类中的getContentPane()和JRootPane中的getContentPane()?   用于Java正则表达式语法的正则表达式ANTLR语法   java hibernate。cfg。即使在运行mvn hibernate3:hbm2cfgxml时,也没有创建xml   eclipse如何将数据写入Java文件中的特定行号