Redis 是一个高性能的内存键值数据库,支持多种数据结构(字符串、列表、哈希、集合等),常用于缓存、消息队列和实时数据处理。Python 通过 redis-py
库与 Redis 交互。
核心功能
- 内存存储:数据存储在内存中,读写速度极快(微秒级)
- 持久化选项:支持 RDB 快照和 AOF 日志两种持久化方式
- 数据结构丰富:
- 字符串(Strings)
- 哈希(Hashes)
- 列表(Lists)
- 集合(Sets)
- 有序集合(Sorted Sets)
- 流(Streams)
- 高可用:支持主从复制和 Redis Sentinel
Python 操作 Redis 示例
1. 安装库
pip install redis
2. 基础操作
import redis# 连接Redis(默认localhost:6379)
r = redis.Redis()# 字符串操作
r.set("name", "Alice") # 设置键值
print(r.get("name")) # 输出: b'Alice'(二进制格式)
print(r.get("name").decode()) # 输出: Alice(转为字符串)# 设置过期时间(30秒)
r.setex("temp_data", 30, "expiring soon")
3. 哈希操作(存储对象)
# 存储用户信息
user_data = {"name": "Bob", "age": "28", "email": "bob@example.com"}
r.hset("user:1001", mapping=user_data)# 获取字段
print(r.hget("user:1001", "name")) # b'Bob'
print(r.hgetall("user:1001")) # {b'name': b'Bob', b'age': b'28', ...}
4. 列表操作(消息队列)
# 向左添加元素
r.lpush("tasks", "task1", "task2") # 向右添加元素
r.rpush("tasks", "task3") # 弹出元素
task = r.rpop("tasks") # 获取并移除最右侧元素
print(task) # b'task3'
5. 发布订阅
# 发布者
r.publish("news_channel", "Breaking news!")# 订阅者(需在另一个进程/线程运行)
pubsub = r.pubsub()
pubsub.subscribe("news_channel")
for message in pubsub.listen():if message["type"] == "message":print(message["data"]) # b'Breaking news!'
6. 管道操作(批量执行)
pipe = r.pipeline()
pipe.set("counter", 100)
pipe.incr("counter") # +1
pipe.incrby("counter", 50) # +50
result = pipe.execute()
print(result) # [True, 101, 151]
典型应用场景
场景 | 使用方式 |
---|---|
缓存 | 存储数据库查询结果 |
会话存储 | 保存用户登录状态 |
排行榜 | 使用有序集合(Sorted Set) |
限流系统 | INCR + EXPIRE 实现请求计数 |
实时消息推送 | 发布订阅模式 |
注意事项
- 内存管理:定期监控内存使用,避免溢出
- 持久化配置:根据需求选择 RDB/AOF 或混合模式
- 连接池:使用连接池提升性能
pool = redis.ConnectionPool(max_connections=10) r = redis.Redis(connection_pool=pool)
- 集群支持:大规模部署使用 Redis Cluster
官方文档:redis-py 文档
Redis 命令参考:Redis Commands
通过合理使用 Redis,可显著提升 Python 应用的性能,尤其适合高并发读写场景。