基本知識點
重點用到了以下命令實現我們的訊息推送
邏輯分析
**實現
普通任務指令碼
phpforeach ($user_list as $item)
redispushqueue
<?php //訊息佇列處理推送~
// // 守護程序執行
// nohup php yourpath/redispushqueue.php & 開啟守護程序執行,修改檔案之後需要從新啟動
// blpop 有值則回去 沒值則阻塞 主要就是這個函式在起作用 不過並不安全,程式在執行過程中崩潰就會導致佇列中的內容
// 永久丟失~
// brpoplpush 阻塞模式 右邊出 左邊進 在填寫佇列內容的時候要求從左進入
//ini_set('default_socket_timeout', -1); //不超時
require_once 'yourparh/rongcloud.php';
$redis = new \redis();
$redis->connect('127.0.0.1', 6379);
$redis->select(2);//切換到db2
$redis->setoption(\redis::opt_read_timeout, -1);
// temp_queue臨時佇列防止程式崩潰導致佇列中內容丟失 0代表永不超時!
while ($key = $redis->brpoplpush('push_queue', 'temp_queue', 0))
$id = $arr[2];
push($id, $val);
//刪除key內容
$redis->del($key);
} }function push($id, $v)
redisautodeletetempqueueitems
<?php /* 自動處理temp_queue中的元素,這個操作是防止redispushqueue崩潰的時候做處理
處理思路是 使用brpo程式設計客棧p 命令阻塞處理temp_queue這個佇列中的值,如果能獲取到"值"對應的"值",說明redispushqueue執行失敗了
將值還lpush到push_程式設計客棧queue中,以備從新處理
至於為程式設計客棧什麼使用brpop命令,是因為在redispushqueue中我們使用的是brpoplpush
nohup php yourpath/redisautodeletetempqueueitems.php & 開啟守護程序執行,修改檔案之後需要從新啟動
*/ini_set'default_socket_timeout', -1); //不超時
$redis = new \redis();
$redis->connect('127.0.0.1', 6379);
$redis->select(2);//切換到db2
$redis->setoption(\redis::opt_read_timeout, -1);
while($key_arr = $redis->brpop('temp_queue',0))
$key =$key_arr[1];
if($redis->get($key))
}本文標題: php基於redis訊息佇列實現的訊息推送的方法
本文位址:
基於redis構建訊息佇列
一般來說,訊息佇列有兩種場景 一種是發布者訂閱者模式 一種是生產者消費者模式。利用redis這兩種場景的訊息佇列都能夠實現。定義 1 redis作為訊息中介軟體 1 producer consumermode 該方式是借助redis的list結構實現的。producer呼叫redis的lpush往特...
php使用redis作為訊息佇列
rpm ivh epel release 6 8.noarch.rpm 安裝epel擴充套件 yum y install redis 安裝redis yum install php redis 安裝php擴充套件 service redis start 啟動redis伺服器 chkconfig re...
php使用redis作為訊息佇列
rpm ivh epel release 6 8.noarch.rpm 安裝epel擴充套件 yum y install redis 安裝redis yum install php redis 安裝php擴充套件 service redis start 啟動redis伺服器 chkconfig re...