php+redis實現消息隊列

語言: CN / TW / HK

php+redis消息隊列是php+mysql性能不足時的一箇中間處理方案.

通過這個中間的處理,保證的數據的可用性和準確性。用於服務器瞬間請求大,數據庫壓力大的情況。如併發量大導致的超賣、併發量大導致的數據重複情況。

流程:php接受請求和數據 -> php把數據寫入redis隊列中(入隊) -> shell定時調用php讀取隊列數據寫入mysql(出隊)

實現代碼:

入隊:inqueue.php

<?php
$redis = new redis();
$redis->connect('127.0.0.1',6379);
$redis -> select('1');
$redis->auth('');
  
$data = [a,b,c,d,e,f,g,h]; //這裏可以是get或post請求過來的數據
$data = json_encode($data);
$in = $redis->rpush('queue',$data);
if($in){
    echo "入隊成功";
}

出隊:outqueue.php

#!/usr/bin/php
<?php
$redis = new redis();
$redis->connect('127.0.0.1',6379);
$redis -> select('1');
$redis->auth('');
  
$value = $redis->lpop('queue');
$value = json_decode($value,true);

shell process.sh:定時調用outqueue.php腳本

#進行每分鐘調用一次
* * * * * /usr/local/nginx/html/process.sh
#!/bin/bash
#file_name : process.sh
#author : zuoping
php /usr/local/nginx/html/outqueue.php

*如果每分鐘調用一次頻率不夠,可以執行多次調用腳本,如:

#!/bin/bash
#file_name : process.sh
#author : zuoping
php /usr/local/nginx/html/outqueue.php
php /usr/local/nginx/html/outqueue.php
php /usr/local/nginx/html/outqueue.php
php /usr/local/nginx/html/outqueue.php
php /usr/local/nginx/html/outqueue.php
php /usr/local/nginx/html/outqueue.php
php /usr/local/nginx/html/outqueue.php
php /usr/local/nginx/html/outqueue.php
php /usr/local/nginx/html/outqueue.php
php /usr/local/nginx/html/outqueue.php
php /usr/local/nginx/html/outqueue.php
#這樣就一分鐘調用了多次了。

查看隊列中的當前數據:

<?php
$redis = new redis();
$redis->connect('127.0.0.1',6379);
$redis -> select('1');
$redis->auth('');
  
$list = $redis->lrange('queue',0,-1);
var_dump($list);

以上內容希望幫助到大家,很多PHPer在進階的時候總會遇到一些問題和瓶頸,業務代碼寫多了沒有方向感,更多PHP大廠PDF面試文檔,PHP進階架構視頻資料,PHP精彩好文免費獲取可以關注公眾號:PHP開源社區,或者訪問:

2021金三銀四大廠面試真題集錦,必看!

四年精華PHP技術文章整理合集——PHP框架篇

四年精華PHP技術文合集——微服務架構篇

四年精華PHP技術文合集——分佈式架構篇

四年精華PHP技術文合集——高併發場景篇

四年精華PHP技術文章整理合集——數據庫篇