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 應用的性能,尤其適合高并發讀寫場景。