redis实现消息队列
redis是一個開源的key-value存儲系統。與Memcached類似,Redis將大部分數據存儲在內存中,支持的數據類型包括:字符串、哈希表、鏈表、集合、有序集合以及基于這些數據類型的相關操作。Redis使用C語言開發,在大多數像Linux、BSD和Solaris等POSIX系統上無需任何外部依賴就可以使用。Redis支持的客戶端語言也非常豐富,常用的計算機語言如C、C#、C++、Object-C、PHP、Python、 Java、Perl、Lua、Erlang等均有可用的客戶端來訪問Redis服務器。當前Redis的應用已經非常廣泛,國內像新浪、淘寶,國外像 Flickr、Github等均在使用Redis的緩存服務。 Redis的安裝非常方便,只需從http://redis.io/download獲取源碼,然后make && make install即可。默認情況下,Redis的服務器啟動程序和客戶端程序會安裝到/usr/local/bin目錄下。在啟動Redis服務器時,我們需要為其指定一個配置文件,缺省情況下配置文件在Redis的源碼目錄下,文件名為redis.conf
在項目中使用消息隊列一般是有如下幾個原因:
把瞬間服務器的請求處理換成異步處理,緩解服務器的壓力
實現數據順序排列獲取
?
?redis實現消息隊列步驟如下:
1).redis函數rpush,lpop
2).建議定時任務入隊列
3)創建定時任務出隊列
?
文件:demo.php插入數據到redis隊列
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?php $redis?=?new?Redis(); $redis->connect('127.0.0.1',6379); $password?=?'123456'; $redis->auth($password); $arr?=?array('h','e','l','l','o','w','o','r','l','d'); foreach($arr?as?$k=>$v){ ??$redis->rpush("mylist",$v); } |
執行后結果如下
?>
?
?
文件:index.php定時掃描出隊列
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <?php $redis?=?new?Redis(); $redis->connect('127.0.0.1',6379); $password?=?'123456'; $redis->auth($password); //list類型出隊操作 $value?=?$redis->lpop('mylist'); if($value){ ?echo?"出隊的值".$value; }else{ ??echo?"出隊完成"; } ?> |
?
?
建立定時任務
?*/1 * * * * root php /wwwroot/workplace/redis/index.php
?*/3 * * * * root php /wwwroot/workplace/redis/demo.php
?
tail -f /var/log/cron ?查看定時任務執行情況
Nov ?7 00:30:01 dongzi CROND[6888]: (root) CMD (php /wwwroot/workplace/redis/demo.php)
Nov ?7 00:30:01 dongzi CROND[6890]: (root) CMD (php /wwwroot/workplace/redis/index.php )
定時任務執行隊列寫入結果如下
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | 127.0.0.1:6379> lrange mylist 0 -1 ?1)?"h" ?2)?"e" ?3)?"l" ?4)?"l" ?5)?"o" ?6)?"w" ?7)?"o" ?8)?"r" ?9)?"l" 10)?"d" |
?定時任務執行出隊列后:
127.0.0.1:6379> lrange mylist 0 -11) "e"2) "l"3) "l"4) "o"5) "w"6) "o"7) "r"8) "l"9) "d"總結
以上是生活随笔為你收集整理的redis实现消息队列的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 南方天天利货币a怎么赎回
- 下一篇: 航拍苏伊士运河堵船震撼画面 全球海运业都