hiredis的python包装器
hiredis的Python项目详细描述
hiredis py
在hiredis中包装协议解析代码的python扩展。 它主要加快了对多个批量回复的解析。
安装
hiredis py在PyPI上提供,并且可以 安装时使用:
pip install hiredis
要求
hiredis py需要python 2.7或3.4+。
确保在安装hiredis py时python开发头可用。
在ubuntu/debian系统上,用python 2的apt-get install python-dev
安装它们
或者python 3的apt-get install python3-dev
。
用法
hiredis
模块包含Reader
类。这个班负责
正在分析从redis连接读取的数据流中的答复。
它不包含处理I/O的功能。
应答分析器
Reader
类有两个方法,在解析来自
数据流。Reader.feed
接受附加到
内部缓冲。Reader.gets
读取此缓冲区并在
缓冲区包含完整的答复。如果对feed
的单个调用包含多个
回复,gets
应该被多次调用以提取所有回复。
示例:
>>>reader=hiredis.Reader()>>>reader.feed("$5\r\nhello\r\n")>>>reader.gets()'hello'
当缓冲区不包含完整答复时,gets
返回False
。这个
意味着需要额外的数据,在调用之前应该再次调用feed
gets
再次:
>>>reader.feed("*2\r\n$5\r\nhello\r\n")>>>reader.gets()False>>>reader.feed("$5\r\nworld\r\n")>>>reader.gets()['hello','world']
Unicode编码
hiredis.Reader
能够将大容量数据解码为python支持的任何编码。
要执行此操作,请指定在以下情况下用于解码答复的编码:
初始化:
>>>reader=hiredis.Reader(encoding="utf-8",errors="strict")>>>reader.feed("$3\r\n\xe2\x98\x83\r\n")>>>reader.gets()u'☃'
将尝试使用指定的编码和
错误处理程序。如果错误处理程序是'strict'
(默认值),则
UnicodeDecodeError
在无法对数据进行dedcoded时引发。这是一样的
python的默认行为。errors
的其他有效值包括
'replace'
、'ignore'
和'backslashreplace'
。更多关于
可以找到这些错误处理程序的行为
here。
当找不到指定的编码时,将引发LookupError
当调用gets
以获取第一个包含大量数据的回复时。
错误处理
当发生协议错误时(因为多个线程使用同一个
套接字或导致流损坏的其他条件),错误
hiredis.ProtocolError
被引发。因为缓冲区是在惰性中读取的
时尚,只有在调用gets
并在
缓冲区包含错误。无法从错误的协议中恢复
状态,因此当发生这种情况时,向Reader
提供数据的I/O代码应该
可能是重新连接。
redis可以用错误回复(-ERR ...
)进行回复。对于这些回复,自定义
返回错误类hiredis.ReplyError
,,但未引发。
当使用其他错误类型时(现有代码不必更改)
它的except
子句、Reader
可以用protocolError
和
replyError
关键词。这些关键字应该包含一个类
Exception
的子类。未提供时,Reader
将使用默认值
错误类型。
基准
存储库在benchmark
目录中包含基准测试脚本,
它使用gevent具有非阻塞I/O和redis py
处理连接。这些基准测试是使用修补版本的
可用时使用hiredis py的redis py。
所有基准测试都是用10个并发连接完成的。
- 设置键值+获取键
- redis py:11.76 kops
- redis py与hiredis py:13.40 kops
- 改进:1.1x
下列测试中的列表项是5个字节。
- 范围列表09:
- redis py:4.78 kops
- redis py与hiredis py:12.94 kops
- 改进:2.7x
- 范围列表099:
- redis py:0.73 kops
- redis pywithhiredis py:11.90 kops
- 改进:16.3x
- 范围列表0999:
- redis py:0.07角
- redis py与hiredis py:5.83 kops
- 改进:83.2x
简单set/get的吞吐量改进很小,但是更大的多批量响应 得到,性能改进越大。
许可证
此代码在获得HIREDIS许可后,根据BSD许可证发布。