连接到 Redis¶
通用客户端¶
- 
class redis.client.Redis(host='localhost', port=6379, db=0, password=None, socket_timeout=None, socket_connect_timeout=None, socket_keepalive=None, socket_keepalive_options=None, connection_pool=None, unix_socket_path=None, encoding='utf-8', encoding_errors='strict', charset=None, errors=None, decode_responses=False, retry_on_timeout=False, ssl=False, ssl_keyfile=None, ssl_certfile=None, ssl_cert_reqs='required', ssl_ca_certs=None, ssl_ca_path=None, ssl_check_hostname=False, ssl_password=None, max_connections=None, single_connection_client=False, health_check_interval=0, client_name=None, username=None, retry=None, redis_connect_func=None)[source]¶
- Redis 协议的实现。 - 此抽象类提供了一个 Python 接口,用于所有 Redis 命令和 Redis 协议的实现。 - 管道继承自此类,实现命令如何发送和接收给 Redis 服务器。根据配置,实例将使用 ConnectionPool 或 Connection 对象与 redis 通信。 - 
classmethod from_url(url, **kwargs)[source]¶
- 返回一个从给定 URL 配置的 Redis 客户端对象 - 例如 - redis://[[username]:[password]]@localhost:6379/0 rediss://[[username]:[password]]@localhost:6379/0 unix://[[username]:[password]]@/path/to/socket.sock?db=0 - 支持三种 URL 方案 - redis:// 创建一个 TCP 套接字连接。更多信息请参见:<https://www.iana.org/assignments/uri-schemes/prov/redis>
- rediss:// 创建一个 SSL 封装的 TCP 套接字连接。更多信息请参见:<https://www.iana.org/assignments/uri-schemes/prov/rediss>
- unix://: 创建一个 Unix 域套接字连接。
 - 用户名、密码、主机名、路径和所有查询字符串值都通过 urllib.parse.unquote 传递,以便用其对应的字符替换任何百分比编码的值。 - 有几种方法可以指定数据库编号。将使用找到的第一个值 - 一个 db查询字符串选项,例如 redis://?db=0
- 如果使用 redis:// 或 rediss:// 方案,则使用 url 的路径参数,例如 redis:///0
- 一个 db关键字参数传递给此函数。
 - 如果没有指定这些选项,则使用默认的 db=0。 - 所有查询字符串选项都转换为相应的 Python 类型。布尔参数可以使用字符串值“True”/“False”或“Yes”/“No”指定。无法正确转换的值会导致引发 - ValueError。解析后,查询字符串参数和关键字参数将传递给- ConnectionPool的类初始化器。在出现冲突参数的情况下,查询字符串参数始终优先。
 - 
load_external_module(funcname, func)[source]¶
- 此函数可用于将外部定义的 redis 模块及其命名空间添加到 redis 客户端。 - funcname - 包含要创建的函数名称的字符串 func - 要添加到此类的函数。 - 例如:假设有一个名为 foomod 的自定义 redis 模块,它在 redis 中创建名为“foo.dothing”和“foo.anotherthing”的命令。要将函数函数加载到此命名空间中 - from redis import Redis from foomodule import F r = Redis() r.load_external_module(“foo”, F) r.foo().dothing(‘your’, ‘arguments’) - 有关具体示例,请参见 tests/test_connection.py::test_loading_external_modules 中 redisjson 模块的重新导入。 
 - 
lock(name, timeout=None, sleep=0.1, blocking_timeout=None, lock_class=None, thread_local=True)[source]¶
- 使用键 - name返回一个新的 Lock 对象,该对象模拟 threading.Lock 的行为。- 如果指定, - timeout表示锁的最大生命周期。默认情况下,它将保持锁定状态,直到调用 release()。- sleep表示当锁处于阻塞模式且另一个客户端当前持有锁时,每次循环迭代的睡眠时间。- blocking_timeout表示尝试获取锁的最大时间(以秒为单位)。- None值表示永远尝试。- blocking_timeout可以指定为浮点数或整数,两者都表示等待的秒数。- lock_class强制使用指定的锁实现。- thread_local指示锁令牌是否放置在线程本地存储中。默认情况下,令牌放置在线程本地存储中,因此线程只能看到自己的令牌,而不会看到另一个线程设置的令牌。考虑以下时间线- 时间:0,线程-1 获取 my-lock,超时时间为 5 秒。
- 线程-1 将令牌设置为“abc”。
- 时间:1,线程-2 使用
- Lock 实例阻塞尝试获取 my-lock。
- 时间:5,线程-1 尚未完成。redis 过期了锁
- 键。
- 时间:5,线程-2 获取 my-lock,因为它现在可用。
- 线程-2 将令牌设置为“xyz”。
- 时间:6,线程-1 完成其工作并调用 release()。如果
- 令牌未存储在线程本地存储中,则线程-1 将看到令牌值为“xyz”,并且能够成功释放线程-2 的锁。
 - 在某些用例中,需要禁用线程本地存储。例如,如果您有代码,其中一个线程获取锁并将该锁实例传递给工作线程以供稍后释放。如果在这种情况下未禁用线程本地存储,则工作线程将看不到获取锁的线程设置的令牌。我们的假设是这些情况并不常见,因此默认情况下使用线程本地存储。 
 
- 
classmethod 
连接池¶
- 
class redis.connection.ConnectionPool(connection_class=<class 'redis.connection.Connection'>, max_connections=None, **connection_kwargs)[source]¶
- 创建连接池。 - 如果 max_connections设置,则当池达到限制时,此对象会引发- ConnectionError。- 默认情况下,除非指定了 - connection_class,否则将创建 TCP 连接。对于 Unix 套接字,请使用- UnixDomainSocketConnection。- 任何其他关键字参数都将传递给 - connection_class的构造函数。- 
disconnect(inuse_connections=True)[source]¶
- 断开池中的连接 - 如果 - inuse_connections为 True,则断开当前正在使用的连接,可能由其他线程使用。否则,只断开池中处于空闲状态的连接。
 - 
类方法 from_url(url, **kwargs)[源代码]¶
- 从给定的 URL 配置连接池。 - 例如 - redis://[[username]:[password]]@localhost:6379/0 rediss://[[username]:[password]]@localhost:6379/0 unix://[[username]:[password]]@/path/to/socket.sock?db=0 - 支持三种 URL 方案 - redis:// 创建一个 TCP 套接字连接。更多信息请参见:<https://www.iana.org/assignments/uri-schemes/prov/redis>
- rediss:// 创建一个 SSL 封装的 TCP 套接字连接。更多信息请参见:<https://www.iana.org/assignments/uri-schemes/prov/rediss>
- unix://: 创建一个 Unix 域套接字连接。
 - 用户名、密码、主机名、路径和所有查询字符串值都通过 urllib.parse.unquote 传递,以便用其对应的字符替换任何百分比编码的值。 - 有几种方法可以指定数据库编号。将使用找到的第一个值 - 一个 db查询字符串选项,例如 redis://?db=0
- 如果使用 redis:// 或 rediss:// 方案,则使用 url 的路径参数,例如 redis:///0
- 一个 db关键字参数传递给此函数。
 - 如果没有指定这些选项,则使用默认的 db=0。 - 所有查询字符串选项都转换为相应的 Python 类型。布尔参数可以使用字符串值“True”/“False”或“Yes”/“No”指定。无法正确转换的值会导致引发 - ValueError。解析后,查询字符串参数和关键字参数将传递给- ConnectionPool的类初始化器。在出现冲突参数的情况下,查询字符串参数始终优先。
 
-