hiredis的python包装器

hiredis的Python项目详细描述


hiredis py

Build StatusWindows Build Status

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。这个 意味着需要额外的数据,在调用之前应该再次调用feedgets再次:

>>>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可以用protocolErrorreplyError关键词。这些关键字应该包含一个Exception的子类。未提供时,Reader将使用默认值 错误类型。

基准

存储库在benchmark目录中包含基准测试脚本, 它使用gevent具有非阻塞I/O和redis py 处理连接。这些基准测试是使用修补版本的 可用时使用hiredis py的redis py。

所有基准测试都是用10个并发连接完成的。

  • 设置键值+获取键
    • redis py:11.76 kops
    • redis pyhiredis py:13.40 kops
    • 改进:1.1x

下列测试中的列表项是5个字节。

  • 范围列表09
    • redis py:4.78 kops
    • redis pyhiredis 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 pyhiredis py:5.83 kops
    • 改进:83.2x

简单set/get的吞吐量改进很小,但是更大的多批量响应 得到,性能改进越大。

许可证

此代码在获得HIREDIS许可后,根据BSD许可证发布。

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

推荐PyPI第三方库


热门话题
java如何将异步类的结果放入mainActivity EditText   java LDAP目录管理器服务提供,OutOfMemory   java Cassandra NoHostAvailableException,但仍存在活动节点   springboot应用程序的java启动线程   如果poll不一定返回第一项,那么java是ConcurrentLinkedQueue的好选择吗?   解析XML时JSON中出现java意外字符串   当'key'是两个整数时,如何输出Java HashMap键?   java为什么不显示在jsp页面中   java使用流式API转换映射列表中的值   JavaJPA+Spring:基于在持久化实体之前接收到的值,将外键列映射到ID   java如何使用selenium读取pdf文件   Canny之后的java对象提取   DSpace没有列出集合,java。lang.NumberFormatException:null   java我可以为数据库表主键设置一个最大值吗?   java如何定义Javadoc链接,可以通过单击   @java/spring中的SessionAttribute是否丢失数据?