简单说一下队列的作用,例如注册账户需要验证邮件,用户填写邮件地址之后点击发送邮件验证码,此时请求到了后端服务,后端再调用程序请求 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实现队列相关推荐

  1. python分布式任务调度_Python使用Celery分布式异步队列/任务调度(基于Redis) - pytorch中文网...

    今天使用爬虫有些耗时较长,需要使用任务调度,Celery是Python开发的分布式任务调度模块,Celery本身不含消息服务,它使用第三方消息服务来传递任务,目前,Celery支持的消息服务有Rabb ...

  2. redis延迟队列 实现_php使用redis的有序集合zset实现延迟队列

    延迟队列就是个带延迟功能的消息队列,相对于普通队列,它可以在指定时间消费掉消息. 延迟队列的应用场景: 1.新用户注册,10分钟后发送邮件或站内信. 2.用户下单后,30分钟未支付,订单自动作废. 我 ...

  3. redis简单队列java_使用Redis的简单消息队列

    redis简单队列java 在本文中,我们将使用列表命令将Redis用作简单的消息队列. 假设我们有一个允许用户上传照片的应用程序. 然后在应用程序中,我们以不同大小显示照片,例如Thumb,Medi ...

  4. redis 队列_Redis与Rabbitmq消息队列的区别

    将redis发布订阅模式用做消息队列和rabbitmq的区别: 可靠性  redis :没有相应的机制保证消息的可靠消费,如果发布者发布一条消息,而没有对应的订阅者的话,这条消息将丢失,不会存在内存中 ...

  5. 华为云PB级数据库GaussDB(for Redis)解析第二期:Redis消息队列Stream的应用探讨

    摘要:本文将对Stream的常用命令和应用场景进行介绍,并探讨原生Redis Stream消息队列的缺陷以及GaussDB(for Redis)提供的解决方案,供大家学习和选用. 华为云高斯Redis ...

  6. .Net大杀器之基于Newlife.Redis的可重复消费+共享订阅队列来替换第三方MQ

    一.前言 消息队列(Message Queue)是分布式系统必不可少的中间件,大部分消息队列产品(如RocketMQ/RabbitMQ/Kafka等)要求团队有比较强的技术实力,不适用于中小团队,并且 ...

  7. php循环取redis队列,详解Redis和队列

    下面由Redis教程栏目给大家详解Redis和队列,希望对需要的朋友有所帮助! 概要 Redis不仅可作为缓存服务器,还可用作消息队列.它的列表类型天生支持用作消息队列.如下图所示: 由于Redis的 ...

  8. springboot使用redis实现消息队列功能,redis使用list和stream实现消息队列功能,redis实现消息队列的风险点分析

    文章目录 写在前面 基于list的消息队列解决方案 使用list基本实现消息队列 阻塞式消费,避免性能损失 替换while(true) 实现消息幂等 保证消息可靠性 基于stream的消息队列解决方案 ...

  9. python使用redis的消息队列_Redis实现简单消息队列

    任务异步化 打开浏览器,输入地址,按下回车,打开了页面.于是一个HTTP请求(request)就由客户端发送到服务器,服务器处理请求,返回响应(response)内容. 我们每天都在浏览网页,发送大大 ...

  10. 使用redis的发布订阅模式实现消息队列

    配置文件 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://w ...

最新文章

  1. 基于python的scrapy爬虫抓取京东商品信息
  2. wp7中的fill_parent
  3. SpringCloud2.0入门4-springboot-admin监控
  4. 菜鸟之路-浅谈设计模式之单例设计模式
  5. 数据库课程设计结论_结论
  6. 【codeforces 798B】Mike and strings
  7. ubuntu20输入法qiehuan_UBUNTU 20 输入法问题
  8. springcloud工作笔记092---清理多余权限垃圾数据小工具
  9. Hibernate建立关系配置(hbm.xml)bag中cascade属性
  10. [Java] 蓝桥杯ADV-171 算法提高 身份证号码升级
  11. linux中求当前时间gettime,linux – 你如何在shell中获得clock_gettime(2)时钟?
  12. Redis 分布式客户端 Redisson 分布式锁快速入门
  13. 在DataList、Repeater的HeaderTemplate和FooterTemplate模板中寻找控件FindControl
  14. 计算机什么应用函数计算,函数计算器软件
  15. 预测模型| 2. Nomogram文献抄读 (2): 如何建立和解读癌症预后列线图
  16. 手机屏幕驱动板HDMI调光触摸旋转说明Fondar
  17. 乐动手环app下载安装_乐动手环app下载安装
  18. 一文搞懂InheritedWidget局部刷新机制
  19. Redis之懒惰删除
  20. R语言使用ggplot2可视化甜甜圈图(Donut chart)

热门文章

  1. mongodb 实现transaction
  2. 计算机建表格,电脑文档怎么做表格
  3. java 旋转方向_Java 旋转PDF页面方向
  4. 微信公众平台模拟登录 php,微信公众平台模拟登陆问题
  5. C语言素数ns流程图,请各位大神帮个忙,画个NS流程图,,急!!!
  6. 查词根词缀特别好的网站
  7. excel卡住了还没保存怎么办?
  8. 听完计算机知识讲座后感悟,计算机技能培训心得感想
  9. 淘宝自动下单软件//下单神器、、
  10. 一篇文章了解光学器件的各种参数含义