Redis(④-消息队列削峰)

消息队列削峰是分布式系统中应对突发流量冲击 的一种重要策略,核心目的是平滑流量波动,保护后端服务不被瞬间高并发压垮

想象你开了一家奶茶店,平时每小时接待 100 个客人(后端服务正常处理能力)。但某天突然来了 500 个客人同时排队(突发流量),如果让所有人同时涌向吧台(直接请求后端),吧台会因为忙不过来而混乱(服务崩溃)。

这时候,你可以让客人先取号排队(进入消息队列),吧台按顺序一个一个处理(消费消息),哪怕外面排了很多人,吧台内始终按自己的节奏处理(100 个 / 小时),避免了瞬间拥挤 ------ 这就是 "削峰"。

用 Python 脚本批量入队(模拟峰值)

producer.py

python 复制代码
import redis
import time

# 连接Redis
r = redis.Redis(host='localhost', port=6379, db=0)
queue_name = "order_queue"

# 模拟秒杀峰值:1秒内产生1000个订单请求
start_time = time.time()
for i in range(1000):
    order_id = f"order_{i + 1}"
    # 入队(左侧添加)
    r.lpush(queue_name, order_id)
    if i % 100 == 0:
        print(f"已发送 {i + 1} 个订单请求")

end_time = time.time()
print(f"峰值流量模拟完成,共发送1000个请求,耗时:{end_time - start_time:.2f}秒")
print(f"当前队列长度:{r.llen(queue_name)}")  # 查看队列中的消息数

模拟 "匀速消费"(消费者处理消息)

consumer.py

python 复制代码
import redis
import time

# 连接Redis
r = redis.Redis(host='localhost', port=6379, db=0)
queue_name = "order_queue"
process_capacity = 100  # 系统每秒处理能力:100个订单

print(f"开始处理订单,每秒处理 {process_capacity} 个...")
processed = 0  # 已处理数量

while True:
    # 出队(右侧取出,FIFO 先进先出)
    # RPOP 会阻塞吗?不会,没有消息时返回None
    order_id = r.rpop(queue_name)
    
    if order_id:
        # 模拟处理订单(实际中这里是业务逻辑)
        processed += 1
        print(f"处理订单:{order_id.decode()},已处理:{processed}")
        
        # 控制处理速度:每处理100个,暂停1秒(匹配系统能力)
        if processed % process_capacity == 0:
            time.sleep(1)
    else:
        # 队列空了,退出
        print("所有订单处理完成!")
        break

核心 Redis 命令解析

命令 作用 对应场景
LPUSH key value 向列表左侧添加消息(入队) 生产者发送消息
RPOP key 从列表右侧取出消息(出队) 消费者处理消息
LLEN key 查看列表长度(当前消息数) 监控队列堆积情况

通过这个例子可以看到,Redis 消息队列就像一个 "缓冲池",把突发的 "尖峰流量" 转化为平缓的 "匀速流量",这就是 "削峰" 的核心逻辑。

相关推荐
Patrick在香港1 天前
Claude API 成本直降90%:Prompt Caching 提示词缓存 Python 实战
python·缓存·prompt
秋田君1 天前
QT_实战TCP 聊天程序说明文档以及实现
数据库·qt·tcp/ip
01_ice1 天前
MySQL基本查询1
数据库·mysql
腾科IT教育1 天前
Oracle OCP/OCM认证含金量实测2026版
数据库·oracle·ocp·ocm·甲骨文
不可求~1 天前
多模型路由怎么落地:把任务分流写进项目的最小实现
java·前端·数据库
Lumistory1 天前
城市建筑照明的落地与长效运营观察
大数据·数据库·中间件·光照贴图
围炉聊科技1 天前
长期免费的数据库方案——零成本基建系列
数据库
AC赳赳老秦1 天前
公开图片 OCR 数据提取:OpenClaw 合规采集公开信息图,识别文字与表格并转化为结构化数据
java·大数据·前端·数据库·python·php·openclaw
梁辰兴2 天前
软件工程:数据结构设计
数据库·软件工程·设计原则·设计方法·梁辰兴·数据库结构设计·数据库结构类型
AC赳赳老秦2 天前
风控岗应用:OpenClaw 采集公开司法与经营异常数据,自动生成企业风险评估报告
大数据·c语言·数据库·人工智能·python·php·openclaw