參考:http://www.cnblogs.com/lisqiong/p/6039460.htmlphp
參考:http://blog.csdn.net/shaobingj126/article/details/50585035html
消息隊列:是在消息的傳輸過程當中保存消息的容器。消息隊列管理器在將消息從它的源中繼到它的目標時充當中間人。隊列的主要目的是提供路由並保證消息的傳遞;若是發送消息時接收者不可用,消息隊列會保留消息,直到能夠成功地傳遞它git
應用場景:異步處理,應用解耦,流量削鋒和消息通信四個場景github
一、異步處理ajax
場景說明:用戶註冊後,須要發註冊郵件和註冊短信。redis
註解:自行考慮ajax中的異步。數據庫
二、應用解耦異步
通常訂單系統和庫存系統是一體的,可是若是一方出現問題,那麼這個訂單就失敗了。函數
註解:感受特別像行爲驅動,消息隊列中存儲的就是每一個行爲spa
三、流量消鋒(通常在秒殺或團搶活動中使用普遍)
註解:通常秒殺時訂單會特別的多,可是數據庫沒法一次性的處理這麼多,因此能夠先存在消息隊列中,不管我進的速度多快,出的速度都是必定的。不知道算不算屬於漏斗模型的一部分
php的redis擴展:https://github.com/phpredis/phpredis
1)redis函數rpush,lpop
2).Linux的crontab
建立demo.php和index.php
<?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); }
<?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