首頁  >  文章  >  後端開發  >  PHP如何使用redis訊息佇列發布微博

PHP如何使用redis訊息佇列發布微博

小云云
小云云原創
2018-02-12 10:07:532247瀏覽

本文主要和大家介紹了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伺服器.

相關推薦:

關於Laravel使用訊息佇列需要注意哪些?

php實作訊息佇列類別實例分享

關於php中beanstalkd訊息佇列的詳解以及類別的分享


以上是PHP如何使用redis訊息佇列發布微博的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn