如何安装 redis-py 并首次连接 Redis 完成一次 set/get 数据读写
【免费下载链接】redis-pyRedis Python client项目地址: https://gitcode.com/GitHub_Trending/re/redis-py
本文解决的问题是:你准备在一台机器上用 Python 操作 Redis,需要完成三件事——把 redis-py 装进 Python 环境、建立到 Redis 服务器的首次连接、并跑通一次set/get数据读写。前提是你已经能启动一个 Redis 服务器(本文给出仓库 README 推荐的 docker 启动方式),并装有 pip 可用的 Python 环境。
准备条件:Python 版本与 Redis 服务器
先看 Python 版本要求,这里仓库内的两处文档说法不完全一致,按适用条件区分:
- 当前仓库代码(pyproject.toml)声明
requires-python = ">=3.10",且 classifiers 列出 Python 3.10–3.14、CPython 与 PyPy; - docs/index.rst 中写着 "Python 3.7+",这是较旧的表述。README 同时说明:redis-py 5.0 是最后一个支持 Python 3.7 的版本,5.1 起要求 3.8+,6.2.0 起要求 3.9+。
因此如果你安装的是最新 redis-py,以>=3.10为准;如果你被旧项目锁定在某个旧版 redis-py,按 README 的版本说明回退判断。
Redis 服务器方面,README 给出两条 docker 启动命令,按你要用的 Redis 版本二选一:
# Redis 版本 >= 8.0 docker run -p 6379:6379 -it redis:latest# Redis 版本 < 8.0 docker run -p 6379:6379 -it redis/redis-stack:latest两条命令都把容器 6379 端口映射到本机 6379,后续示例的连接地址都基于这个端口。库与 Redis 服务器的兼容范围见 README 的 "Supported Redis Versions":最近的库版本支持 Redis 7.2、7.4、8.0、8.2、8.4、8.6、8.8,并有版本对照表(如>= 6.0.0对应 Redis 7.2 及以上)。如果你的 Redis 服务器版本不在此范围,先确认服务器版本再决定是否更换客户端库版本。
安装 redis-py
最简安装命令来自 README:
pip install redis可选分支:如果追求更快的响应解析性能,README 建议安装带 hiredis 的编译型解析器,多数情况下无需改动代码,且当环境中存在 hiredis >= 1.0 时 redis-py 会默认尝试使用它:
pip install "redis[hiredis]"这一步只影响解析性能,不影响后文的连接与读写流程,按需选择即可。
首次连接 Redis 并用 ping 验证
连接成功与否有一个直接的验证方式:调用r.ping()。docs/index.rst 给出三种快速连接写法,分别对应本地默认地址、指定 host/port、URL 字符串三种情形:
import redis # Redis 运行在 localhost:6379(默认值) r = redis.Redis() r.ping()import redis # Redis 运行在 foo.bar.com:12345 r = redis.Redis(host='foo.bar.com', port=12345) r.ping()import redis # 用 URL 形式指定 r = redis.from_url('redis://foo.bar.com:12345') r.ping()foo.bar.com和12345是文档示例中的占位地址,替换为你自己的 Redis 服务器地址和端口;如果服务器就在本机 6379 端口,直接用第一段代码即可。docs/examples/connection_examples.ipynb 中本地默认连接redis.Redis()的ping()返回值为True(文档示例输出),你可以以同样方式判断连接是否建立。
如果连接的是需要认证的服务器,同样的构造函数接受username/password参数,例如 connection_examples.ipynb 中的redis.Redis(host='localhost', port=6380, username='dvora', password='redis', decode_responses=True);无认证需求时不必关心。
完成一次 set/get 数据读写
连接可用后,用set写入、get读回,验证数据确实落到了 Redis 里。README 的 Basic Example:
import redis r = redis.Redis(host='localhost', port=6379, db=0) r.set('foo', 'bar') # 返回 True r.get('foo') # 返回 b'bar'这里有两个必须理解的点:
set成功返回True,get返回写入的值。上面True与b'bar'是 README 文档示例中展示的输出形态,不是额外校验公式,实际运行以你的值为准;- 默认情况下 Python 侧收到的响应是 bytes(
b'bar'而不是'bar')。要得到解码后的字符串,在构造客户端时设置decode_responses=True。
docs/examples/set_and_get_examples.ipynb 演示了带decode_responses=True的完整读写流程(其中输出均为文档示例):
import redis r = redis.Redis(decode_responses=True) r.ping() # True r.set("full_name", "john doe") # True r.exists("full_name") # 1 r.get("full_name") # 'john doe'该 notebook 还展示了同 key 覆盖写入(再次set("full_name", "overridee!")后get返回'overridee!'),以及用setex("important_key", 100, "important_value")带过期时间写入、ttl("important_key")查询剩余秒数(文档示例返回100)。如果你只验证一次最小读写,set+get两段已经足够;setex/ttl是同一 notebook 中的可选延伸。
结果验证与已知边界
验证清单,全部来自上述文档展示的输出:
r.ping()返回True—— 连接建立;r.set(...)返回True—— 写入成功;r.get(...)返回写入的值 —— 默认是 bytes(如b'bar'),设置decode_responses=True后是字符串(如'john doe');r.exists("full_name")返回1—— key 存在。
几个首次使用时容易踩到的边界:
- 连接池是默认行为:每个
redis.Redis实例自带自己的连接池;如果想共享池,用redis.ConnectionPool(host='localhost', port=6379, db=0)再redis.Redis(connection_pool=pool)(README Connection Pools 一节); - 协议版本:从 redis-py 8.0 起,客户端在链路上默认使用 RESP3,但保留兼容旧的 RESP2 Python 响应形态;如需显式指定,
protocol=3或protocol=2(docs/examples/connection_examples.ipynb)。新项目 README 建议设置legacy_responses=False以获得与协议无关的统一响应形态; - 异步、集群、Sentinel 是另一组客户端(
redis.asyncio、RedisCluster、Sentinel,见 docs/connections.rst),本文的单节点redis.Redis路径不适用于它们,不要混用。
下一步
跑通本次读写后,完整的命令函数集合在 docs/commands.rst 对应的文档中,连接参数(超时、SSL 等)与更多连接示例可继续参考 docs/examples/connection_examples.ipynb 与 docs/connections.rst。
【免费下载链接】redis-pyRedis Python client项目地址: https://gitcode.com/GitHub_Trending/re/redis-py
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考