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

Redis(④-消息队列削峰)

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

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

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

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

producer.py

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

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 会阻塞吗?不会,没有消息时返回Noneorder_id = r.rpop(queue_name)if order_id:# 模拟处理订单(实际中这里是业务逻辑)processed += 1print(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 消息队列就像一个 “缓冲池”,把突发的 “尖峰流量” 转化为平缓的 “匀速流量”,这就是 “削峰” 的核心逻辑。

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

相关文章:

  • 吴恩达 深度学习笔记
  • Coze Studio 概览(九)--插件管理
  • 配电线路故障定位在线监测装置的技术解析与应用价值
  • 应急响应流程
  • 基于 C++ 的湍流数值模拟理论报告
  • 从零构建桌面写作软件的书籍管理系统:Electron + Vue 3 实战指南
  • 中小业务遭遇网络攻击,防护能力不足的解决办法​
  • electron 静默安装同时安装完成后自动启动(nsis)
  • Spark在什么情况下CBO才会判断失误,如何避免
  • 服务器登上去,显示 failed to send WATCHDOG 重启有效吗?
  • Uber的MySQL实践(一)——学习笔记
  • I/O原理与服务。
  • 智慧交通场景下 mAP↑28%:陌讯多模态融合算法实战解析
  • OpenAI 开源模型 GPT-OSS MCP服务器深度解密:从工具集成到系统提示全自动化,浏览器+Python无缝协同的底层逻辑
  • 微软Azure AI Foundry正式上线GPT-5系列模型
  • CORS 跨域问题 Next.js 跨域问题放通
  • 《从零构建大语言模型》学习笔记2,文本数据处理1(以及tiktoken库无法下载gpt2参数,调用get_encoding时SSL超时的解决方法)
  • 中国的超算中心使用情况如何?是否算力过剩
  • Eyevinn 彻底改变开源部署模式
  • 初步认识AMSU-A/B、HIRS-3/4、MHS、ATMS、GOES
  • 字典列表依据数值键排序
  • 【跨国数仓迁移最佳实践5】MaxCompute近线查询解决方案助力物流电商等实时场景实现高效查询
  • 防火墙安全作用及 firewalld 交互、端口配置
  • zookeeper3.8.4安装以及客户端C++api编译
  • hyper-v虚拟机启动失败:Virtual Pci Express Port无法打开电源,因为发生错误,找不到即插即用设备
  • ESP32-menuconfig(2) -- Application manager
  • Lazada东南亚矩阵营销破局:指纹手机如何以“批量智控+数据中枢”重构运营生态
  • Dart关键字完全指南:从基础到高级用法详解
  • 商品期货场外期权系统解决方案:跨境金融科技赋能大宗商品风险管理
  • 【代码随想录day 15】 力扣 110.平衡二叉树