php redis 訊息佇列

2022-08-01 21:03:11 字數 969 閱讀 4659

redis是什麼東西就不多說了,網上文章一搜一大堆。

首先來說一下我要實現的功能:

類似乙個訊息中轉站吧,如果有人要傳送訊息,先將訊息發到我這裡來,然後我這邊進行**,為的就是有乙個統一的管理和修改時方便,

而且所有的訊息有優先順序,也會有定時傳送(如果同一時間訊息過多,則會有延遲)

思路:首先乙個是將這兩個分為兩個佇列來實現, 乙個用來實現訊息優先順序,乙個來實現定時傳送

用的是redis的有序集合,用zadd新增時,將score比做是優先順序,也可以用時間戳來當做score,用來表示時間

php 版本簡易實現

將訊息加入優先順序的佇列,將1,2替換為時間就是定時傳送的佇列了

1 $redis = newredis();

2 $redis->connect('127.0.0.1', 6379);

3 $redis->zadd('zset1', 1, 'message');

4 $redis->zadd('zset1', 2, 'message2');

從佇列中取出資料

1 $redis->zrevrangebyscore('zset1, '+inf', '-inf', array('withscores'=>false, 'limit'=>array(0,20)));

這條語句表示從zset1這個佇列裡按照score從最大(+inf)到最小(-inf)的排序中取出20條,不帶score,如果想要從小到大可以用  zrangebyscore

如果你想讓這些都執行在命令列下,可以參考下面來,當然這些是經過刪減的

1 <?php 

2 while (true) else if ($pid == 0) else

14 }

pcntl_fork是php中的生成子程序,當呼叫該函式時,會返回乙個程序pid,當pid為0時表明是在子程序中,所以把要執行的東西全放這裡

php redis實現訊息佇列

參考 參考 訊息佇列 是在訊息的傳輸過程中儲存訊息的容器。訊息佇列管理器在將訊息從它的源中繼到它的目標時充當中間人。佇列的主要目的是提供路由並保證訊息的傳遞 如果傳送訊息時接收者不可用,訊息佇列會保留訊息,直到可以成功地傳遞它 應用場景 非同步處理,應用解耦,流量削鋒和訊息通訊四個場景 1 非同步處...

php redis實現訊息佇列

個人理解在專案中使用訊息佇列一般是有如下幾個原因 把瞬間伺服器的請求處理換成非同步處理,緩解伺服器的壓力 實現資料順序排列獲取 redis實現訊息佇列步驟如下 1 redis函式rpush,lpop 2 建議定時任務入佇列 3 建立定時任務出佇列 檔案 demo.php插入資料到redis佇列 re...

PHP REDIS 實現訊息佇列服務

redis new redis redis connect 127.0.0.1 6379 生成任務 tasks for i 0 i 3 i 投遞任務給消費者 res redis lpush tasks tasks redis new redis redis connect 127.0.0.1 637...