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 <?phppcntl_fork是php中的生成子程序,當呼叫該函式時,會返回乙個程序pid,當pid為0時表明是在子程序中,所以把要執行的東西全放這裡2 while (true) else if ($pid == 0) else
14 }
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...