登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
资讯
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
1
2
/ 2 页
下一页
返回列表
首页
›
资源区
›
代码
›
PHP转Go系列 | ThinkPHP与Gin框架之Redis延时消息队列技 ...
PHP转Go系列 | ThinkPHP与Gin框架之Redis延时消息队列技术实践
[ 复制链接 ]
莠畅缕
2025-6-4 14:18:20
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
大家好,我是码农先森。
我们在某宝或某多多上抢购商品时,如果只是下了订单但没有进行实际的支付,那在订单页面会有一个支付倒计时,要是过了这个时间点那么订单便会自动取消。在这样的业务场景中,一般情况下就会使用到延时队列。
通常在客户下单之后,就会将订单数据推送到延时队列中并且会对该消息设置一个延时时长,比如设置五分钟、十分钟、或十五分钟等,具体的时长应该还是要结合当前的业务进行衡量,然后消费端会在指定时间到达后就对该消息进行支付支付状态判断,如果已经支付则不予处理,要还是未支付,则会取消该订单,并且释放商品库存。
我们这次分享的内容,主要是基于 Redis 延时队列的实现方式,当然除了 Redis 还可以用其他的技术,比如 RabbitMQ、Kafka、RocketMQ 等专业的消息队列。但是我用 Redis 的原因是,它的应用场景比较广泛,我们平时接触也比较多,而且相对于专业的消息队列它没有过多复杂的配置,学起来容易上手,出了问题解决起来也快,学东西的路径都是由易到难嘛。
另外,如果你对上面提到的专业消息队列使用很熟练,也可以将 Redis 更换成它们,这里只是存储介质的不同,技术的实现逻辑上没有太大区别,重要的是设计思想,大家各取所需吧。
好了,我先介绍一下这次延时队列的实现逻辑。主要分为三个部分,一是:消息的发送,如果设置了延时时间则会将消息存储到 Redis 的延时队列中,反之会直接将消息推送到 Redis 的就绪队列中等待消费。二是:将到期的消息从 Redis 延时队列中取出,并且推送到 Redis 的就绪队列中等待消费。三是:消费端会从 Redis 的就绪队列中按顺序读取出消息,并且执行对应的业务处理逻辑,如果处理失败则会将该消息,再次推送到 Redis 的延时队列中进行下一次的重试。
这里说到的延时队列是利用 Redis 有序集合来实现的,它每间隔一秒钟就会被轮询一次,如果有到期的消息,则就会将该消息推送到 Redis 就绪队列,并且从该集合中移除过期的消息,至此就可以等待着消费端进行消费了。接下来我们就从实际的代码出发,来看一下如何实现基于 Redis 的延时队列。
话不多说,开整!我们先来看一下整体的项目目录结构,内容主要分为 PHP 和 Go 两部分。
[manongsen@root php_to_go]$ tree -L 2
.
├── go_delay
│ ├── app
│ │ ├── controller
│ │ │ └── notify.go
│ │ ├── config
│ │ │ └── config.go
│ │ ├── extend
│ │ │ └── queue.go
│ │ └── route.go
│ ├── go.mod
│ ├── go.sum
│ └── main.go
└── php_delay
│ ├── app
│ │ ├── controller
│ │ │ └── Notify.php
│ ├── composer.json
│ ├── composer.lock
│ ├── command
│ │ └── Consumer.php
│ ├── route
│ │ └── app.php
│ ├── extend
│ │ └── Queue.php
│ ├── think
│ ├── vendor
│ └── .env
复制代码
ThinkPHP
使用 composer 创建基于 ThinkPHP 框架的 php_delay 项目。
## 当前目录
[manongsen@root ~]$ pwd
/home/manongsen/workspace/php_to_go/php_delay
## 安装 ThinkPHP 框架
[manongsen@root php_delay]$ composer create-project topthink/think php_delay
[manongsen@root php_delay]$ cp .example.env .env
## 安装 Composer 依赖包
[manongsen@root php_delay]$ composer require predis/predis
## 创建一个消费者脚本
[manongsen@root php_delay]$ php think make:command Consumer
## 创建一个生产者脚本,用于测试
[manongsen@root php_delay]$ php think make:command Producer
复制代码
这个就是延时队列实现的核心类,定义了就绪、延时、失败三个消息队列。send() 方法用于发送消息,其中可以指定 $delay 参数设置延时时间单位是秒。wait() 方法用于消费端监听消息,从下面的代码可以看出这里还利用多进程,父进程的作用是每间隔一秒钟,就从 Redis 有序集合中读取到期的消息,并将该消息推送到 Redis 就绪队列,子进程则阻塞监听就绪队列的消息,并且将接收到的消息回调到用户自定义的业务函数中。
[code]
PHP
Go
系列
ThinkPHP
Gin
相关帖子
OpenCalw系列---【OpenClaw如何接入飞书?】
Go - Zerolog使用入门
OpenCode系列---【OpenCode接入白山智算模板】
OpenCode系列---【OpenCode接入白山智算模板】
OpenCode系列---【OpenCode接入白山智算模板】
开源 | ChatClaw Go语言开发的openclaw龙虾智能体
在 PHP 中写真正的异步代码 TrueAsync 0.6.0 已支持数据库链接池
解锁小米8EG5系列机型的注意事项
GoChatIAI -Go语言AI应用服务平台(2)
GoChatIAI -Go语言AI应用服务平台(3)
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
安全
OpenCalw系列---【OpenClaw如何接入飞书?】
0
923
晌集涟
2026-03-10
业界
Go - Zerolog使用入门
0
1025
仰翡邸
2026-03-11
业界
OpenCode系列---【OpenCode接入白山智算模板】
0
1006
夔新梅
2026-03-11
业界
OpenCode系列---【OpenCode接入白山智算模板】
0
744
屋稷删
2026-03-11
业界
OpenCode系列---【OpenCode接入白山智算模板】
0
60
齐娅晶
2026-03-11
业界
开源 | ChatClaw Go语言开发的openclaw龙虾智能体
0
322
寿爹座
2026-03-12
业界
在 PHP 中写真正的异步代码 TrueAsync 0.6.0 已支持数据库链接池
0
21
步雪卉
2026-03-14
业界
解锁小米8EG5系列机型的注意事项
0
509
染悄
2026-03-17
业界
GoChatIAI -Go语言AI应用服务平台(2)
0
379
陆菊
2026-03-17
安全
GoChatIAI -Go语言AI应用服务平台(3)
0
34
挺喽蹂
2026-03-17
回复
(30)
襁壮鸢
2025-10-30 20:23:29
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
过来提前占个楼
巫雪艷
2026-1-9 06:07:01
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
用心讨论,共获提升!
习和璧
2026-1-13 00:57:55
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
很好很强大 我过来先占个楼 待编辑
套缈
2026-1-15 18:13:22
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
感谢,下载保存了
铵滔
2026-1-18 17:47:03
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
热心回复!
筒霓暄
2026-1-20 16:35:26
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
喜欢鼓捣这些软件,现在用得少,谢谢分享!
鄂缮输
2026-1-20 23:13:58
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
热心回复!
撒阗奕
2026-1-22 02:27:32
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
很好很强大 我过来先占个楼 待编辑
普料飕
2026-1-22 03:36:47
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
喜欢鼓捣这些软件,现在用得少,谢谢分享!
荡俊屯
2026-1-29 02:42:52
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
热心回复!
毋献仪
2026-1-29 05:40:26
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
不错,里面软件多更新就更好了
煅圆吧
2026-2-5 13:06:52
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
东西不错很实用谢谢分享
狞嗅
2026-2-7 15:43:01
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
鼓励转贴优秀软件安全工具和文档!
鞠彗云
2026-2-8 18:21:29
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
东西不错很实用谢谢分享
骂治并
2026-2-8 18:31:47
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
谢谢分享,试用一下
瞪皱炕
2026-2-8 21:31:19
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
感谢,下载保存了
班闵雨
2026-2-9 09:08:59
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
用心讨论,共获提升!
孙淼淼
2026-2-10 15:27:04
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
鼓励转贴优秀软件安全工具和文档!
糙昧邵
2026-2-10 20:19:02
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
过来提前占个楼
下一页 »
1
2
/ 2 页
下一页
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
浏览过的版块
软件
签约作者
程序园优秀签约作者
发帖
莠畅缕
2026-2-10 20:19:02
关注
0
粉丝关注
30
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
3934307807
991125
anyue1937
9994892
kk14977
6845359
4
xiangqian
638210
5
神泱
9522
6
韶又彤
9912
7
宋子
9878
8
荪俗
9016
9
闰咄阅
9995
10
刎唇
9995
查看更多
今日好文热榜
743
"Memory in the Age of AI Agents: A Surve
216
Prompt 焚诀——一个模板,终结你和 AI 的
510
【节点】[SampleTexture3D节点]原理解析与
166
记一次Webshell流量分析 | 添柴不加火
978
旧安卓手机部署openclaw
635
AI编程时代,35岁以上程序员将何去何从?
828
[Refactor]CPP Learn Data Day 1
2
Block Copy 的内存布局详解
616
把 Flask 搬进 ESP32,高中生自研嵌入式 We
7
渐得如意智能自动化办公平台——定义属于你
890
[AI/Agent/社交] AI Agent社交网络产品:Mo
526
C++协程入门
286
TCSSOFTDEPTCOPY.zip Can download source
803
Vue3 + Iframe 实战:打造企业级流程配置中
824
“你用AI,那我也会用AI,我还要你干什么?
623
自感痕迹论:先验意义场域与经验痕迹内外
9
一道KMP统考真题彻底讲透:nextval与滑动距
9
一道KMP统考真题彻底讲透:nextval与滑动距
743
从 Clubhouse 的崛起与陨落,看语聊房 RTC
245
老马失前蹄,竟然在数据库外键上翻车了,重