php+redis消息队列是php+mysql性能不足时的一个中间间处理方案。通过这个中间的处理,保证的数据的可用性和准确性。用于服务器瞬间请求大,数据库压力大的情况。如并发量大导致的超卖、并发量大导致的数据重复情况。

流程:php接受请求和数据 -> php把数据写入redis队列中(入队) -> shell定时调用php读取队列数据写入mysql(出队)

实现代码:

入队:inqueue.php

php
  1. <?php
  2. $redis = new redis();
  3. $redis->connect('127.0.0.1',6379);
  4. $redis -> select('1');
  5. $redis->auth('');
  6. $data = [a,b,c,d,e,f,g,h]; //这里可以是get或post请求过来的数据
  7. $data = json_encode($data);
  8. $in = $redis->rpush('queue',$data);
  9. if($in){
  10. echo "入队成功";
  11. }

出队:outqueue.php

php
  1. #!/usr/bin/php
  2. <?php
  3. $redis = new redis();
  4. $redis->connect('127.0.0.1',6379);
  5. $redis -> select('1');
  6. $redis->auth('');
  7. $value = $redis->lpop('queue');
  8. $value = json_decode($value,true);

shell process.sh:定时调用outqueue.php脚本

php
  1. #进行每分钟调用一次
  2. * * * * * /usr/local/nginx/html/process.sh
php
  1. #!/bin/bash
  2. #file_name : process.sh
  3. #author : zuoping
  4. php /usr/local/nginx/html/outqueue.php

*如果每分钟调用一次频率不够,可以执行多次调用脚本,如:

php
  1. #!/bin/bash
  2. #file_name : process.sh
  3. #author : zuoping
  4. php /usr/local/nginx/html/outqueue.php
  5. php /usr/local/nginx/html/outqueue.php
  6. php /usr/local/nginx/html/outqueue.php
  7. php /usr/local/nginx/html/outqueue.php
  8. php /usr/local/nginx/html/outqueue.php
  9. php /usr/local/nginx/html/outqueue.php
  10. php /usr/local/nginx/html/outqueue.php
  11. php /usr/local/nginx/html/outqueue.php
  12. php /usr/local/nginx/html/outqueue.php
  13. php /usr/local/nginx/html/outqueue.php
  14. php /usr/local/nginx/html/outqueue.php
  15. #这样就一分钟调用了多次了。

查看队列中的当前数据:

php
  1. <?php
  2. $redis = new redis();
  3. $redis->connect('127.0.0.1',6379);
  4. $redis -> select('1');
  5. $redis->auth('');
  6. $list = $redis->lrange('queue',0,-1);
  7. var_dump($list);
 

php和redis实现消息队列的更多相关文章

  1. Redis 做消息队列

    一般来说,消息队列有两种场景,一种是发布者订阅者模式,一种是生产者消费者模式.利用redis这两种场景的消息队列都能够实现.定义: 生产者消费者模式:生产者生产消息放到队列里,多个消费者同时监听队列, ...

  2. Redis作为消息队列服务场景应用案例

    NoSQL初探之人人都爱Redis:(3)使用Redis作为消息队列服务场景应用案例   一.消息队列场景简介 “消息”是在两台计算机间传送的数据单位.消息可以非常简单,例如只包含文本字符串:也可以更 ...

  3. redis resque消息队列

    Resque 目前正在学习使用resque .resque-scheduler来发布异步任务和定时任务,为了方便以后查阅,所以记录一下. resque和resque-scheduler其优点在于功能比 ...

  4. 【springboot】【redis】springboot+redis实现发布订阅功能,实现redis的消息队列的功能

    springboot+redis实现发布订阅功能,实现redis的消息队列的功能 参考:https://www.cnblogs.com/cx987514451/p/9529611.html 思考一个问 ...

  5. 【Redis】php+redis实现消息队列

    在项目中使用消息队列一般是有如下几个原因: 把瞬间服务器的请求处理换成异步处理,缓解服务器的压力 实现数据顺序排列获取 redis实现消息队列步骤如下: 1).redis函数rpush,lpop 2) ...

  6. Lumen开发:结合Redis实现消息队列(1)

    1.简介 Lumen队列服务为各种不同的后台队列提供了统一的API.队列允许你推迟耗时任务(例如发送邮件)的执行,从而大幅提高web请求速度. 1.1 配置 .env文件的QUEUE_DRIVER选项 ...

  7. Redis除了做缓存--Redis做消息队列/Redis做分布式锁/Redis做接口限流

    1.用Redis实现消息队列 用命令lpush入队,rpop出队 Long size = jedis.lpush("QueueName", message);//返回存放的数据条数 ...

  8. sping+redis实现消息队列的乱码问题

    使用spring支持redis实现消息队列,参考官方样例:https://spring.io/guides/gs/messaging-redis/ 实现后在运行过程中发现消费者在接收消息时会出现乱码的 ...

  9. 程序员过关斩将--redis做消息队列,香吗?

    Redis消息队列 在程序员这个圈子打拼了太多年,见过太多的程序员使用redis,其中一部分喜欢把redis做缓存(cache)使用,其中最典型的当属存储用户session,除此之外,把redis作为 ...

  10. NoSQL初探之人人都爱Redis:(3)使用Redis作为消息队列服务场景应用案例

    一.消息队列场景简介 “消息”是在两台计算机间传送的数据单位.消息可以非常简单,例如只包含文本字符串:也可以更复杂,可能包含嵌入对象.消息被发送到队列中,“消息队列”是在消息的传输过程中保存消息的容器 ...

随机推荐

  1. 嵌入式【杂记--手机芯片与pc】

    手机.身边的移动设备大多数是嵌入式计算机,pc也是计算机,只是功耗上很大. 手机所采用的大多数芯片是英国ARM公司的架构coretom A系列 core, Intel公司采用自己的架构设计的芯片适用于 ...

  2. RedisTemplate5种数据结构操作

    1 操作字符串 redisTemplate.opsForValue(); 2 操作hash redisTemplate.opsForHash(); 3 操作list redisTemplate.ops ...

  3. Linux下python安装升级详细步骤 | Python2 升级 Python3 转载

    Linux下python升级步骤  Python2 ->Python3 多数情况下,系统自动的Python版本是2.x 或者yum直接安装的也是2.x 但是,现在多数情况下建议使用3.x 那么如 ...

  4. 【HANA系列】SAP HANA中null变成问号的问题

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA中null变成问 ...

  5. logistics多分类

    multiclassification #DATASET: https://archive.ics.uci.edu/ml/datasets/Glass+Identificationimport num ...

  6. LeetCode | DP专题详解

    221 medium     221. Maximal Square Medium Given a 2D binary matrix filled with 0's and 1's, find the ...

  7. linux批量删除

    find . -name "*.bcp" | xargs rm -rf "*.bcp"

  8. 【Vue高级知识】细谈Vue 中三要素(响应式+模板+render函数)

    [Vue高级知识]细谈Vue 中三要素(响应式+模板+render函数):https://blog.csdn.net/m0_37981569/article/details/93304809

  9. L2-013. 红色警报(并查集+无向图联通分量)

    战争中保持各个城市间的连通性非常重要.本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报.注意:若该国本来就不完全连通,是分裂的k个区域,而失去一个城市并不 ...

  10. 在web项目中配置log4j

    在web.xml中添加如下代码 <context-param> <param-name>contextConfigLocation</param-name> < ...