redis-py:Python 里操作 Redis 的标准方案

redis-py 在 GitHub 上已经拿到 13,556 Star 了。

这是 Redis 官方维护的 Python 客户端,从基础读写、连接池管理到 Pipeline、PubSub、集群连接,功能覆盖得很全。如果你用 Python 操作 Redis,基本绕不开它。

正文顶部截图

1、这玩意儿是干嘛的

redis-py 就是 Python 和 Redis 之间的桥梁。它把 Redis 的命令映射成 Python 方法,开发者不需要自己处理网络协议、序列化、连接复用这些底层细节。

几乎所有开箱即用的 Redis 命令都内置了支持。HSET、HGETALL、LPUSH、ZADD 这些命令直接按原名暴露,只有少数命令因为和 Python 关键字冲突做了调整,比如 DEL 在 Python 里不能用,就换了别的名字。

它还支持连接池、Pipeline 批量执行、PubSub 消息订阅、集群模式、异步连接,以及 RESP3 新协议。复杂场景下该有的特性基本都有了。

README区域截图

2、为什么要用它

Python 的 Redis 客户端不止一个,但 redis-py 是官方维护的。新特性跟进快,协议兼容性有保障,出了问题也有人修。

它的版本策略很清晰。redis-py 5.0 支持 Python 3.7+,5.1 开始要求 Python 3.8+,6.2.0 开始要求 Python 3.9+。Redis 服务端方面,当前版本支持 Redis 7.2、7.4、8.0 和 8.2。兼容性表格在文档里写得明明白白,升级时心里有数。

连接池是默认行为。每个 Redis 实例自动带一个连接池,不需要额外配置就能复用连接。高并发场景下自己管理连接池也很容易,传一个 ConnectionPool 进去就行。hiredis 支持也是自动检测的,装了就会用,不需要改代码。

另一个好处是生态兼容。Django、Celery、FastAPI 这些框架的 Redis 集成底层大多依赖 redis-py。用它意味着和主流 Python 生态对齐。

3、核心功能一览

RESP3 支持从 5.0 版本开始加入。8.0 起默认使用 RESP3 协议,但保留和 RESP2 兼容的响应格式,老项目升级不会打断。新项目建议关闭 legacy 模式,拿到统一的 Python 数据结构。

Pipeline 批量执行命令,减少网络往返。用法很直接:创建 pipeline 实例,链式调用命令,execute() 一次性拿到结果列表。批量写入场景下性能提升很明显。

PubSub 封装成了独立类。订阅频道、监听消息、处理回调,几行代码就能跑起来。订阅状态下不能执行普通命令,这个限制在文档里也说清楚了。

搜索查询方面,6.0.0 引入了客户端默认的 DIALECT 2,FT.SEARCH 和 FT.AGGREGATE 会自动附加这个参数。查询语义可能因此变化,需要回退时可以手动配置版本。

多数据库客户端支持 Active-Active 部署,能自动监控数据库健康状态并在故障时切换。这个特性主要面向 Redis Enterprise 和 Redis Cloud 用户,普通单节点用不上。

异步 API 从 asyncio 模块导入,接口和同步版几乎一样,学习成本很低。集群连接也有专门的支持,通过 RedisCluster 类就能连上 Redis Cluster 架构。

4、安装和基本用法

安装一行命令:

pip install redis

需要更快的响应解析,可以装带 hiredis 的版本:

pip install "redis[hiredis]"

基础读写:

import redis
r = redis.Redis(host='localhost', port=6379, db=0)
r.set('foo', 'bar')
r.get('foo')

连接池自定义:

pool = redis.ConnectionPool(host='localhost', port=6379, db=0)
r = redis.Redis(connection_pool=pool)

RESP3 新项目的推荐配置:

r = redis.Redis(host='localhost', port=6379, db=0, legacy_responses=False)

异步、集群、PubSub 的用法文档里都有示例,按场景直接翻就行。

5、适合哪些人用

用 Python 写后端服务、需要缓存或消息队列的开发者
维护现有 Redis 集成、考虑升级协议版本的技术团队
做数据管道、需要 Pipeline 批量操作或 PubSub 实时通知的工程师
刚开始接触 Redis、想要一份稳定 Python 接口的新人

虑升级协议版本的技术团队
做数据管道、需要 Pipeline 批量操作或 PubSub 实时通知的工程师
刚开始接触 Redis、想要一份稳定 Python 接口的新人

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐