zoukankan      html  css  js  c++  java
  • php和redis实现消息队列

     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.  
    7. $data = [a,b,c,d,e,f,g,h]; //这里可以是get或post请求过来的数据
    8. $data = json_encode($data);
    9. $in = $redis->rpush('queue',$data);
    10. if($in){
    11.     echo "入队成功";
    12. }

    出队: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.  
    8. $value = $redis->lpop('queue');
    9. $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.  
    7. $list = $redis->lrange('queue',0,-1);
    8. var_dump($list);
     
  • 相关阅读:
    HttpClient——POST请求方法
    【Httpclient+TestNG】接口自动化测试——GET请求示例
    一些杂碎的小知识点
    搭建linux服务器的环境
    javase(1)
    事务处理
    数据库优化
    表单重复提交--->使用Session防止表单重复提交
    两个小程序
    java基础小知识(2)
  • 原文地址:https://www.cnblogs.com/bluealine/p/11039414.html
Copyright © 2011-2022 走看看