這篇文章主要介紹了PHP使用redis訊息佇列發布微博的方法,結合具體執行個體形式分析了php結合redis資料庫操作訊息佇列實現微博發布的相關技巧與注意事項,需要的朋友可以參考下
具體如下:
在一些使用者發布內容應用中,可能出現1秒上萬個使用者同時發布訊息的情況,此時使用mysql可能會出現" too many connections"錯誤,當然把Mysql的max_connections參數設定為更大數,不過這是一個治標不治本的方法。而使用redis的訊息佇列,把使用者發布的訊息暫時儲存在訊息佇列中,然後使用多個cron程式把訊息佇列中的資料插入到Mysql。這樣就有效降低了Mysql的高並發。具體實現原理如下:
現有微博發布介面:
$weibo = new Weibo();$uid = $weibo->get_uid();$content =$weibo->get_content;$time = time();$webi->post($uid,$content,$time);
此方法直接把微博內容寫入Mysql。具體過程省略。
把訊息寫入到redis:
$redis = new Redis(localhost,6379);$redis->connect();$webiInfo = array('uid'=>get_uid(),'content'=>get_content(),'time'=>time());$redis->lpush('weibo_list',json_encode($weiboInfo));$redis->close();
從redis中取出資料:
while(true){ if($redis->lsize('weibo_list') > 0){ $info = $redis->rpop('weibo_list'); $info = json_decode($info); }else{ sleep(1); }}$weibo->post($info->uid,$info->content,$info->time);//插入資料的時候可以用一次性插入多條資料的方法,避免迴圈插入,不停的迴圈插入可能會導致死結問題。
提示:可以運行多個cron程式同時把訊息佇列的資料插入到Mysql中,當一台Redis伺服器不能應付大量並發時,使用一致性Hash演算法,把並發分發到不同的Redis伺服器。
相關推薦:
php+redis訊息隊列實現搶購步驟詳解(附代碼)
PHP如何使用redis訊息隊列發布微博
Redis訊息通知系統的實現