php基於Redis訊息佇列實現的訊息推送的方法

2022-09-26 07:06:09 字數 1652 閱讀 8829

基本知識點

重點用到了以下命令實現我們的訊息推送

邏輯分析

**實現

普通任務指令碼

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...