跳转到主要内容

hiredis的Python封装

项目描述

hiredis-py

Build Status License pypi

Python扩展,封装了hiredis中的协议解析代码。它主要加快了多批量回复的解析速度。

如何使用Redis?

在Redis大学免费学习

使用Redis Launchpad加速构建

尝试Redis Cloud

深入了解开发者教程

加入Redis社区

在Redis工作

安装

hiredis-py可在PyPI上找到,并且可以通过以下方式安装

pip install hiredis

构建和测试

构建此存储库需要递归检出子模块并构建hiredis。以下示例显示了如何克隆、编译和运行测试。请注意 - 您需要安装gcc。

git clone --recurse-submodules https://github.com/redis/hiredis-py
python setup.py build_ext --inplace
python -m pytest

要求

hiredis-py需要 Python 3.8+

确保在安装hiredis-py时Python开发头文件可用。在Ubuntu/Debian系统上,使用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()
b'hello'

如果缓冲区不包含完整回复,gets将返回False。这意味着需要额外的数据,并且在再次调用gets之前应再次调用feed。或者,您可以通过参数提供自定义哨兵对象,这对于支持原生布尔类型的RESP3协议很有用。

示例

>>> reader.feed("*2\r\n$5\r\nhello\r\n")
>>> reader.gets()
False
>>> reader.feed("$5\r\nworld\r\n")
>>> reader.gets()
[b'hello', b'world']
>>> reader = hiredis.Reader(notEnoughData=Ellipsis)
>>> reader.gets()
Ellipsis

Unicode

hiredis.Reader能够将大量数据解码为Python支持的任何编码。为此,在初始化时指定用于解码回复的编码。

>>> reader = hiredis.Reader(encoding="utf-8", errors="strict")
>>> reader.feed(b"$3\r\n\xe2\x98\x83\r\n")
>>> reader.gets()
'☃'

将尝试使用指定的编码和错误处理器解码大量数据。如果错误处理器为'strict'(默认值),则在数据无法解码时引发UnicodeDecodeError。这与Python的默认行为相同。其他有效的errors值包括'replace''ignore''backslashreplace'。有关这些错误处理器的更多信息,请参阅此处

当找不到指定的编码时,在调用gets以获取第一个包含大量数据的回复时将引发LookupError

错误处理

当发生协议错误(由于多个线程使用相同的套接字或其他导致损坏流的条件)时,将引发错误hiredis.ProtocolError。由于以惰性方式读取缓冲区,因此它只会在调用gets并且缓冲区中的第一个回复包含错误时引发。无法从错误的协议状态中恢复,因此在这种情况下,向Reader提供数据的I/O代码应可能重新连接。

Redis可以回复错误回复(-ERR ...)。对于这些回复,返回自定义错误类hiredis.ReplyError,但不会引发。

当应使用其他错误类型时(因此现有代码无需更改其except子句),可以使用protocolErrorreplyError关键字初始化Reader。这些关键字应包含一个,它是Exception的子类。如果没有提供,则Reader将使用默认的错误类型。

基准测试

存储库中包含一个位于benchmark目录的基准测试脚本,它使用gevent进行非阻塞I/O并使用redis-py处理连接。这些基准测试使用redis-py的修补版本进行,该版本在可用时使用hiredis-py。

所有基准测试都是使用10个并发连接进行的。

  • SET key value + GET key
    • redis-py: 11.76 Kops
    • redis-py with hiredis-py: 13.40 Kops
    • 改进:1.1倍

以下测试中的列表条目为5字节。

  • LRANGE list 0 9
    • redis-py: 4.78 Kops
    • redis-py with hiredis-py: 12.94 Kops
    • 改进:2.7倍
  • LRANGE list 0 99
    • redis-py: 0.73 Kops
    • redis-py with hiredis-py: 11.90 Kops
    • 改进:16.3倍
  • LRANGE list 0 999
    • redis-py: 0.07 Kops
    • redis-py with hiredis-py: 5.83 Kops
    • 改进:83.2倍

对于简单的SET/GET,吞吐量改进很小,但随着多批量回复的大小增加,性能改进也更大。

许可

该代码在hiredis许可之后以BSD许可发布。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分布

hiredis-3.0.0.tar.gz (87.6 kB 查看哈希值)

上传

构建分布

hiredis-3.0.0-pp310-pypy310_pp73-win_amd64.whl (21.9 kB 查看哈希值)

上传 PyPy Windows x86-64

hiredis-3.0.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (48.3 kB 查看哈希值)

上传 PyPy manylinux: glibc 2.17+ x86-64

hiredis-3.0.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (47.9 kB 查看哈希值)

上传 PyPy manylinux: glibc 2.17+ ARM64

hiredis-3.0.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (55.6 kB 查看哈希值)

上传 PyPy manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

hiredis-3.0.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl (36.9 kB 查看哈希值)

上传 PyPy macOS 11.0+ ARM64

hiredis-3.0.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl (39.8 kB 查看哈希值)

上传 PyPy macOS 10.15+ x86-64

hiredis-3.0.0-pp39-pypy39_pp73-win_amd64.whl (21.9 kB 查看哈希)

上传于 PyPy Windows x86-64

hiredis-3.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (48.2 kB 查看哈希)

上传于 PyPy manylinux: glibc 2.17+ x86-64

hiredis-3.0.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (47.8 kB 查看哈希)

上传于 PyPy manylinux: glibc 2.17+ ARM64

hiredis-3.0.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (55.5 kB 查看哈希)

上传于 PyPy manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

hiredis-3.0.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl (36.8 kB 查看哈希)

上传于 PyPy macOS 11.0+ ARM64

hiredis-3.0.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl (39.8 kB 查看哈希)

上传于 PyPy macOS 10.15+ x86-64

hiredis-3.0.0-pp38-pypy38_pp73-win_amd64.whl (21.9 kB 查看哈希)

上传于 PyPy Windows x86-64

hiredis-3.0.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (48.3 kB 查看哈希)

上传于 PyPy manylinux: glibc 2.17+ x86-64

hiredis-3.0.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (48.0 kB 查看哈希)

上传于 PyPy manylinux: glibc 2.17+ ARM64

hiredis-3.0.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (55.6 kB 查看哈希)

上传于 PyPy manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

hiredis-3.0.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl (36.9 kB 查看哈希)

上传于 PyPy macOS 11.0+ ARM64

hiredis-3.0.0-pp38-pypy38_pp73-macosx_10_15_x86_64.whl (39.8 kB 查看哈希)

上传于 PyPy macOS 10.15+ x86-64

hiredis-3.0.0-cp312-cp312-win_amd64.whl (22.0 kB 查看哈希)

上传于 CPython 3.12 Windows x86-64

hiredis-3.0.0-cp312-cp312-win32.whl (20.2 kB 查看哈希)

上传于 CPython 3.12 Windows x86

hiredis-3.0.0-cp312-cp312-musllinux_1_2_x86_64.whl (164.0 kB 查看哈希)

上传于 CPython 3.12 musllinux: musl 1.2+ x86-64

hiredis-3.0.0-cp312-cp312-musllinux_1_2_s390x.whl (165.9 kB 查看哈希)

上传于 CPython 3.12 musllinux: musl 1.2+ s390x

hiredis-3.0.0-cp312-cp312-musllinux_1_2_ppc64le.whl (173.6 kB 查看哈希)

上传于 CPython 3.12 musllinux: musl 1.2+ ppc64le

hiredis-3.0.0-cp312-cp312-musllinux_1_2_i686.whl (161.4 kB 查看哈希)

上传于 CPython 3.12 musllinux: musl 1.2+ i686

hiredis-3.0.0-cp312-cp312-musllinux_1_2_aarch64.whl (162.6 kB 查看哈希)

上传于 CPython 3.12 musllinux: musl 1.2+ ARM64

hiredis-3.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (169.1 kB 查看哈希)

上传于 CPython 3.12 manylinux: glibc 2.17+ x86-64

hiredis-3.0.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl (168.6 kB 查看哈希)

上传于 CPython 3.12 manylinux: glibc 2.17+ s390x

hiredis-3.0.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (179.2 kB 查看哈希值)

上传时间: CPython 3.12 manylinux: glibc 2.17+ ppc64le

hiredis-3.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (168.3 kB 查看哈希值)

上传时间: CPython 3.12 manylinux: glibc 2.17+ ARM64

hiredis-3.0.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (164.7 kB 查看哈希值)

上传时间: CPython 3.12 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

hiredis-3.0.0-cp312-cp312-macosx_11_0_arm64.whl (42.5 kB 查看哈希值)

上传时间: CPython 3.12 macOS 11.0+ ARM64

hiredis-3.0.0-cp312-cp312-macosx_10_15_x86_64.whl (44.8 kB 查看哈希值)

上传时间: CPython 3.12 macOS 10.15+ x86-64

hiredis-3.0.0-cp312-cp312-macosx_10_15_universal2.whl (81.5 kB 查看哈希值)

上传时间: CPython 3.12 macOS 10.15+ universal2 (ARM64, x86-64)

hiredis-3.0.0-cp311-cp311-win_amd64.whl (21.9 kB 查看哈希值)

上传时间: CPython 3.11 Windows x86-64

hiredis-3.0.0-cp311-cp311-win32.whl (20.0 kB 查看哈希值)

上传时间: CPython 3.11 Windows x86

hiredis-3.0.0-cp311-cp311-musllinux_1_2_x86_64.whl (161.6 kB 查看哈希值)

上传时间: CPython 3.11 musllinux: musl 1.2+ x86-64

hiredis-3.0.0-cp311-cp311-musllinux_1_2_s390x.whl (164.0 kB 查看哈希值)

上传时间: CPython 3.11 musllinux: musl 1.2+ s390x

hiredis-3.0.0-cp311-cp311-musllinux_1_2_ppc64le.whl (171.5 kB 查看哈希值)

上传于 CPython 3.11 musllinux: musl 1.2+ ppc64le

hiredis-3.0.0-cp311-cp311-musllinux_1_2_i686.whl (159.7 kB 查看哈希值)

上传于 CPython 3.11 musllinux: musl 1.2+ i686

hiredis-3.0.0-cp311-cp311-musllinux_1_2_aarch64.whl (160.5 kB 查看哈希值)

上传于 CPython 3.11 musllinux: musl 1.2+ ARM64

hiredis-3.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (166.6 kB 查看哈希值)

上传于 CPython 3.11 manylinux: glibc 2.17+ x86-64

hiredis-3.0.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl (166.8 kB 查看哈希值)

上传于 CPython 3.11 manylinux: glibc 2.17+ s390x

hiredis-3.0.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (177.3 kB 查看哈希值)

上传于 CPython 3.11 manylinux: glibc 2.17+ ppc64le

hiredis-3.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (166.3 kB 查看哈希值)

上传于 CPython 3.11 manylinux: glibc 2.17+ ARM64

hiredis-3.0.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (162.6 kB 查看哈希值)

上传于 CPython 3.11 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

hiredis-3.0.0-cp311-cp311-macosx_11_0_arm64.whl (42.4 kB 查看哈希值)

上传于 CPython 3.11 macOS 11.0+ ARM64

hiredis-3.0.0-cp311-cp311-macosx_10_15_x86_64.whl (44.7 kB 查看哈希值)

上传于 CPython 3.11 macOS 10.15+ x86-64

hiredis-3.0.0-cp311-cp311-macosx_10_15_universal2.whl (81.4 kB 查看哈希值)

上传于 CPython 3.11 macOS 10.15+ universal2 (ARM64, x86-64)

hiredis-3.0.0-cp310-cp310-win_amd64.whl (21.9 kB 查看哈希值)

上传于 CPython 3.10 Windows x86-64

hiredis-3.0.0-cp310-cp310-win32.whl (20.0 kB 查看哈希值)

上传于 CPython 3.10 Windows x86

hiredis-3.0.0-cp310-cp310-musllinux_1_2_x86_64.whl (161.0 kB 查看哈希值)

上传于 CPython 3.10 musllinux: musl 1.2+ x86-64

hiredis-3.0.0-cp310-cp310-musllinux_1_2_s390x.whl (163.3 kB 查看哈希值)

上传于 CPython 3.10 musllinux: musl 1.2+ s390x

hiredis-3.0.0-cp310-cp310-musllinux_1_2_ppc64le.whl (171.0 kB 查看哈希值)

上传于 CPython 3.10 musllinux: musl 1.2+ ppc64le

hiredis-3.0.0-cp310-cp310-musllinux_1_2_i686.whl (159.3 kB 查看哈希值)

上传于 CPython 3.10 musllinux: musl 1.2+ i686

hiredis-3.0.0-cp310-cp310-musllinux_1_2_aarch64.whl (160.0 kB 查看哈希值)

上传于 CPython 3.10 musllinux: musl 1.2+ ARM64

hiredis-3.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (166.0 kB 查看哈希值)

上传于 CPython 3.10 manylinux: glibc 2.17+ x86-64

hiredis-3.0.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl (166.1 kB 查看哈希值)

上传于 CPython 3.10 manylinux: glibc 2.17+ s390x

hiredis-3.0.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (176.8 kB 查看哈希值)

上传于 CPython 3.10 manylinux: glibc 2.17+ ppc64le

hiredis-3.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (165.7 kB 查看哈希值)

上传于 CPython 3.10 manylinux: glibc 2.17+ ARM64

hiredis-3.0.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (162.2 kB 查看哈希值)

上传于 CPython 3.10 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

hiredis-3.0.0-cp310-cp310-macosx_11_0_arm64.whl (42.5 kB 查看哈希值)

上传于 CPython 3.10 macOS 11.0+ ARM64

hiredis-3.0.0-cp310-cp310-macosx_10_15_x86_64.whl (44.8 kB 查看哈希值)

上传于 CPython 3.10 macOS 10.15+ x86-64

hiredis-3.0.0-cp310-cp310-macosx_10_15_universal2.whl (81.5 kB 查看哈希值)

上传于 CPython 3.10 macOS 10.15+ universal2 (ARM64, x86-64)

hiredis-3.0.0-cp39-cp39-win_amd64.whl (21.9 kB 查看哈希值)

上传于 CPython 3.9 Windows x86-64

hiredis-3.0.0-cp39-cp39-win32.whl (20.0 kB 查看哈希值)

上传于 CPython 3.9 Windows x86

hiredis-3.0.0-cp39-cp39-musllinux_1_2_x86_64.whl (160.5 kB 查看哈希值)

上传于 CPython 3.9 musllinux: musl 1.2+ x86-64

hiredis-3.0.0-cp39-cp39-musllinux_1_2_s390x.whl (162.8 kB 查看哈希值)

上传于 CPython 3.9 musllinux: musl 1.2+ s390x

hiredis-3.0.0-cp39-cp39-musllinux_1_2_ppc64le.whl (170.5 kB 查看哈希值)

上传时间 CPython 3.9 musllinux: musl 1.2+ ppc64le

hiredis-3.0.0-cp39-cp39-musllinux_1_2_i686.whl (158.7 kB 查看哈希值)

上传时间 CPython 3.9 musllinux: musl 1.2+ i686

hiredis-3.0.0-cp39-cp39-musllinux_1_2_aarch64.whl (159.7 kB 查看哈希值)

上传时间 CPython 3.9 musllinux: musl 1.2+ ARM64

hiredis-3.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (165.3 kB 查看哈希值)

上传时间 CPython 3.9 manylinux: glibc 2.17+ x86-64

hiredis-3.0.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl (165.5 kB 查看哈希值)

上传时间 CPython 3.9 manylinux: glibc 2.17+ s390x

hiredis-3.0.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (176.1 kB 查看哈希值)

上传时间 CPython 3.9 manylinux: glibc 2.17+ ppc64le

hiredis-3.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (165.0 kB 查看哈希值)

上传时间 CPython 3.9 manylinux: glibc 2.17+ ARM64

hiredis-3.0.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (161.7 kB 查看哈希值)

上传时间 CPython 3.9 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

hiredis-3.0.0-cp39-cp39-macosx_11_0_arm64.whl (42.4 kB 查看哈希值)

上传时间 CPython 3.9 macOS 11.0+ ARM64

hiredis-3.0.0-cp39-cp39-macosx_10_15_x86_64.whl (44.8 kB 查看哈希值)

上传时间 CPython 3.9 macOS 10.15+ x86-64

hiredis-3.0.0-cp39-cp39-macosx_10_15_universal2.whl (81.5 kB 查看哈希值)

上传时间 CPython 3.9 macOS 10.15+ universal2 (ARM64, x86-64)

hiredis-3.0.0-cp38-cp38-win_amd64.whl (21.9 kB 查看哈希值)

上传时间 CPython 3.8 Windows x86-64

hiredis-3.0.0-cp38-cp38-win32.whl (20.0 kB 查看哈希值)

上传时间 CPython 3.8 Windows x86

hiredis-3.0.0-cp38-cp38-musllinux_1_2_x86_64.whl (161.2 kB 查看哈希值)

上传时间 CPython 3.8 musllinux: musl 1.2+ x86-64

hiredis-3.0.0-cp38-cp38-musllinux_1_2_s390x.whl (163.5 kB 查看哈希值)

上传时间 CPython 3.8 musllinux: musl 1.2+ s390x

hiredis-3.0.0-cp38-cp38-musllinux_1_2_ppc64le.whl (171.2 kB 查看哈希值)

上传时间 CPython 3.8 musllinux: musl 1.2+ ppc64le

hiredis-3.0.0-cp38-cp38-musllinux_1_2_i686.whl (159.5 kB 查看哈希值)

上传时间 CPython 3.8 musllinux: musl 1.2+ i686

hiredis-3.0.0-cp38-cp38-musllinux_1_2_aarch64.whl (160.3 kB 查看哈希值)

上传时间 CPython 3.8 musllinux: musl 1.2+ ARM64

hiredis-3.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (166.9 kB 查看哈希值)

上传时间 CPython 3.8 manylinux: glibc 2.17+ x86-64

hiredis-3.0.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl (167.2 kB 查看哈希值)

上传时间 CPython 3.8 manylinux: glibc 2.17+ s390x

hiredis-3.0.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (177.7 kB 查看哈希值)

上传于 CPython 3.8 manylinux: glibc 2.17+ ppc64le

hiredis-3.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (166.8 kB 查看哈希值)

上传于 CPython 3.8 manylinux: glibc 2.17+ ARM64

hiredis-3.0.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (162.7 kB 查看哈希值)

上传于 CPython 3.8 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

hiredis-3.0.0-cp38-cp38-macosx_11_0_arm64.whl (42.5 kB 查看哈希值)

上传于 CPython 3.8 macOS 11.0+ ARM64

hiredis-3.0.0-cp38-cp38-macosx_10_15_x86_64.whl (44.8 kB 查看哈希值)

上传于 CPython 3.8 macOS 10.15+ x86-64

hiredis-3.0.0-cp38-cp38-macosx_10_15_universal2.whl (81.5 kB 查看哈希值)

上传于 CPython 3.8 macOS 10.15+ universal2 (ARM64, x86-64)

支持者