php用redis实现队列,PHP使用Redis实现队列
简单说一下队列的作用,例如注册账户需要验证邮件,用户填写邮件地址之后点击发送邮件验证码,此时请求到了后端服务,后端再调用程序请求 SMTP 发送邮件,此时发送可能需要一定时间,这个时间根据服务器性能 / 网络延迟耗时 / 远程 SMTP 服务相应时间 等相关因素,快则一秒不到,慢则可能几分钟,如果每个用户点了发送验证码就立即发送然后有了发送结果再反回给用户,可能会导致超时连接,如果不超时也会导致用户等待时间过长用户体验不好。 为了解决这些不能明确知道所需耗时的服务,就需要使用异步队列了。
首先需要在环境上安装 redis ,如果环境是 Windows 可以看这篇文章:Windows下安装Redis和Redis PHP扩展
也可以直接使用 PHPStudy 集成环境,如果是 Linux 可以直接看官方,或者这篇文章:Centos编译安装Redis
除了 Redis 其实还有很多工具都可以作为队列驱动,例如 MySql / MongoDb 等。
队列的核心思想就是,入栈出栈,左进右出 或 右进左出:
博主写的简易代码实现加入队列:$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->lpush('www_bubaijun_com_queue', $_GET['push'] ?? '测试数据');
echo '队列入栈成功 / 加入队列成功';
访问这个写好的 PHP 会返回 “队列入栈成功 / 加入队列成功”,再看看 Redis 已经存储的数据:
此时再依次访问:
http://localhost/queue_push.php?push=1
http://localhost/queue_push.php?push=2
同样会加 push 参数存入 Redis:
加入队列成功了,接下来就是要写一个消费队列的:$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
queueExecute($redis);
echo '执行成功';
function queueExecute($redis)
{
$value = $redis->rpop('www_bubaijun_com_queue');
if ($value) {
file_put_contents('queue_execute.txt', $value . PHP_EOL, FILE_APPEND);
return queueExecute($redis);
} else {
return true;
}
}
先执行一下这个 PHP 文件,也可以使用 PHP CLI 形式执行:PS E:\soft\phpstudy_pro\www> php queue_pop.php
执行成功
此时目录下会生成了一个 queue_execute.txt 文件,打开这个文件可以看到里面的数据:测试数据
1
2
可以看到,存入到 Redis 的时候 “测试数据” 这个值是在最后面的,而写入到文件的时候是第一个被写入的,也就是先入队列的将会被先消费。
队列的业务逻辑写好之后,需要将这个命令写入定时任务:php (可以在这加入绝对路径)queue_pop.php
可以将定时任务设置为一分钟执行一次,这里也说一下上面消费队列的递归作用,在一分钟执行这个 PHP 的时候,如果 Redis 列表(本文实现的队列是用的 Redis 列表类型 如果不懂可以去看看 Redis 文档或者这方面的教程)里面还有数据就会继续执行消费队列。
php用redis实现队列,PHP使用Redis实现队列相关推荐
- python分布式任务调度_Python使用Celery分布式异步队列/任务调度(基于Redis) - pytorch中文网...
今天使用爬虫有些耗时较长,需要使用任务调度,Celery是Python开发的分布式任务调度模块,Celery本身不含消息服务,它使用第三方消息服务来传递任务,目前,Celery支持的消息服务有Rabb ...
- redis延迟队列 实现_php使用redis的有序集合zset实现延迟队列
延迟队列就是个带延迟功能的消息队列,相对于普通队列,它可以在指定时间消费掉消息. 延迟队列的应用场景: 1.新用户注册,10分钟后发送邮件或站内信. 2.用户下单后,30分钟未支付,订单自动作废. 我 ...
- redis简单队列java_使用Redis的简单消息队列
redis简单队列java 在本文中,我们将使用列表命令将Redis用作简单的消息队列. 假设我们有一个允许用户上传照片的应用程序. 然后在应用程序中,我们以不同大小显示照片,例如Thumb,Medi ...
- redis 队列_Redis与Rabbitmq消息队列的区别
将redis发布订阅模式用做消息队列和rabbitmq的区别: 可靠性 redis :没有相应的机制保证消息的可靠消费,如果发布者发布一条消息,而没有对应的订阅者的话,这条消息将丢失,不会存在内存中 ...
- 华为云PB级数据库GaussDB(for Redis)解析第二期:Redis消息队列Stream的应用探讨
摘要:本文将对Stream的常用命令和应用场景进行介绍,并探讨原生Redis Stream消息队列的缺陷以及GaussDB(for Redis)提供的解决方案,供大家学习和选用. 华为云高斯Redis ...
- .Net大杀器之基于Newlife.Redis的可重复消费+共享订阅队列来替换第三方MQ
一.前言 消息队列(Message Queue)是分布式系统必不可少的中间件,大部分消息队列产品(如RocketMQ/RabbitMQ/Kafka等)要求团队有比较强的技术实力,不适用于中小团队,并且 ...
- php循环取redis队列,详解Redis和队列
下面由Redis教程栏目给大家详解Redis和队列,希望对需要的朋友有所帮助! 概要 Redis不仅可作为缓存服务器,还可用作消息队列.它的列表类型天生支持用作消息队列.如下图所示: 由于Redis的 ...
- springboot使用redis实现消息队列功能,redis使用list和stream实现消息队列功能,redis实现消息队列的风险点分析
文章目录 写在前面 基于list的消息队列解决方案 使用list基本实现消息队列 阻塞式消费,避免性能损失 替换while(true) 实现消息幂等 保证消息可靠性 基于stream的消息队列解决方案 ...
- python使用redis的消息队列_Redis实现简单消息队列
任务异步化 打开浏览器,输入地址,按下回车,打开了页面.于是一个HTTP请求(request)就由客户端发送到服务器,服务器处理请求,返回响应(response)内容. 我们每天都在浏览网页,发送大大 ...
- 使用redis的发布订阅模式实现消息队列
配置文件 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://w ...
最新文章
- SAP EWM - 其他主数据 - 运输主数据-1
- 12面魔方公式图解法_【高级篇】(三)三阶魔方CFOP高级玩法之——F2L
- leetcode C++ 42. 接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 上面是由数组 [0,1,0,2,1,0,1,3,2,
- linux添加文件后无法启动,linux安装后grub无法启动
- JS获取当前对象大小以及屏幕分辨率等
- 不可用于python编程开发的是_Python编程语言可做而不应做的一些事是什么_Python视频_Python视频教程_编程语言_课课家...
- 分享一个应届生与打工人找工作的数据参考网站
- svn 在windows下创建仓库子目录失败解决办法
- 关于EXP-00056: 遇到 ORACLE 错误 1455 ORA-01455: 转换列溢出整数数据类型 EXP-00000: 导出终止失败 的问题解决方法整理
- PLSQL连接本地的Oracle数据库
- Mybatis if test中字符串比较
- 如何在 R 中计算 线性模型 SST、SSR 和 SSE
- 进阶之路 | 奇妙的Activity之旅
- ORACLE读写分离(注:根据网上资料搭建完成步奏总结)
- 线性回归模型异方差解决方法
- 自用计算机一套送东西,购买笔记本电脑别忘记索要赠品
- C++程序的设计机制1:NVI机制(Non-Virtual Interface )
- 破解程序员的 5 大迷思,《新程序员 004》正式上市!
- python文件批量改名
- php 搜索引擎 分词_PHP使用elasticsearch搜索安装及分词方法
热门文章
- C# 字节(数组)与位之间的计算
- 苹果付费app共享公众号_8.10号,IOS苹果App Store 5款付费App限时免费,支持iPhone/iPad...
- 第八周 项目三--顺序串算法
- 查看MXNet模型结构
- 酞菁-氧化石墨烯(NiPc- NHCO-EGO)|齐岳生物提供酞菁定制材料
- ORACLE 11G使用exp或者pl/sql导出空表
- linux桌面小程序开发日记_1(pyqt5 + yolov5)
- 点对点广域网技术介绍
- 人物志 | 技术十年:美团第一位前端工程师潘魏增
- flutter设置签名