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);
 

最新文章

  1. JavaScript权威设计--JavaScript表达式与运算符(简要学习笔记五)
  2. Webpack从入门到上线
  3. ASP.NET Core (Database First)
  4. asp.net web api CORS
  5. c++错误代码1
  6. 关于查询扩展版ESI高被引论文的说明
  7. appium的xpath定位
  8. MOSS 2010:Visual Studio 2010开发体验(14)——列表开发之事件接收器
  9. objective-C学习笔记(十)协议
  10. C++如何将一个整数输出为小数
  11. slf4j 之logback日志之环境安装【一】
  12. [BJOI2019]光线[递推]
  13. springmvc 项目完整示例01 需求与数据库表设计 简单的springmvc应用实例 web项目
  14. Find Longest common string
  15. Java笔记(十一)通用容器类和总结
  16. 关于XCode工程中PrefixHead.pch文件的使用
  17. docker 小结
  18. k64 datasheet学习笔记3---Chip Configuration之System modules
  19. (3)学习笔记 ) ASP.NET CORE微服务 Micro-Service ---- Consul服务治理
  20. 【CF61D】Eternal Victory

热门文章

  1. 【HANA系列】【第六篇】SAP HANA XS使用JavaScript(JS)调用存储过程(Procedures)
  2. 导模块的细节:(跨文件导入模块 &amp;模块的两种执行方式) | 包的概念与使用 | 包中的相对导入语法
  3. Ubuntu18.04两步纯小白傻瓜无脑式安装Caffe
  4. mysql——创建表、修改表、删除表(概念详细讲解)
  5. flutter环境配置(windows)
  6. PTA(Basic Level)1046.划拳
  7. Oracle 获取当前日期是月的第几周
  8. 关于maven自动部署tomcat9 步骤
  9. MyBatis清空数据库表数据
  10. Python简单主机批量管理工具