当前位置: 首页 > news >正文

Python Redis 简介

在这里插入图片描述


Redis 是一个高性能的内存键值数据库,支持多种数据结构(字符串、列表、哈希、集合等),常用于缓存、消息队列和实时数据处理。Python 通过 redis-py 库与 Redis 交互。


核心功能
  1. 内存存储:数据存储在内存中,读写速度极快(微秒级)
  2. 持久化选项:支持 RDB 快照和 AOF 日志两种持久化方式
  3. 数据结构丰富
    • 字符串(Strings)
    • 哈希(Hashes)
    • 列表(Lists)
    • 集合(Sets)
    • 有序集合(Sorted Sets)
    • 流(Streams)
  4. 高可用:支持主从复制和 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 实现请求计数
实时消息推送发布订阅模式

注意事项

  1. 内存管理:定期监控内存使用,避免溢出
  2. 持久化配置:根据需求选择 RDB/AOF 或混合模式
  3. 连接池:使用连接池提升性能
    pool = redis.ConnectionPool(max_connections=10)
    r = redis.Redis(connection_pool=pool)
    
  4. 集群支持:大规模部署使用 Redis Cluster

官方文档:redis-py 文档
Redis 命令参考:Redis Commands

通过合理使用 Redis,可显著提升 Python 应用的性能,尤其适合高并发读写场景。

http://www.lryc.cn/news/572251.html

相关文章:

  • Day05_数据结构总结Z(手写)
  • 设计模式精讲 Day 7:桥接模式(Bridge Pattern)
  • 68、数据访问-crud实验-删除用户完成
  • 优化TCP/IP协议栈与网络层
  • 十年年化50%+的策略如何进化?兼容机器学习流程的量化策略开发,附python代码
  • WOOT BD活动背后的策略与操作
  • openKylin适配RISC-V高性能服务器芯片,携手睿思芯科共拓智算新蓝海
  • Linux head 命令
  • 软件项目管理(第4版)部分课后题答案
  • 腾讯云TCCP认证考试报名 - TDSQL数据库交付运维高级工程师(MySQL版)
  • 【设计模式】用观察者模式对比事件订阅(相机举例)
  • 智能混合检索DeepSearch
  • 《二叉搜索树》
  • Git版本控制详细资料
  • Postman 的 Jenkins 管理 - 自动构建
  • ABP VNext + MongoDB 数据存储:多模型支持与 NoSQL 扩展
  • 【深度学习】生成对抗网络(GANs)深度解析:从理论到实践的革命性生成模型
  • 理想树获沙利文认证,赢得中学教辅图书市场认可
  • java Class类反射getDeclaredMethod() 和 getMethod()的区别
  • Linux中的阻塞信号与信号原理
  • Linux 并发编程:从线程池到单例模式的深度实践
  • 用 STM32 HAL/LL + Arduino 混合编程
  • 硬件-DAY04(ds18b20、ARM内核)
  • Python打卡:Day31
  • 矩阵置零C++
  • Linux:信号和线程
  • 如何在 Pop!_OS 或 Ubuntu Linux 上安装 Dash to Dock
  • 设备巡检系统小程序ThinkPHP+UniApp
  • 中科米堆全自动三维光学测量航空部件尺寸测量分析
  • 虚幻引擎的 Online Subsystem