在一些使用者發布內容應用中,可能出現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)else}
$weibo->post($info->uid,$info->content,$info->time);
//插入資料的時候可以用一次性插入多條資料的方法,避免迴圈插入,不停的迴圈插入可能會導致死鎖問題。
使用訊息佇列發布微博
在一些使用者發布內容應用中,可能出現1秒上萬個使用者同時發布訊息的情況,此時使用mysql可能會出現 too many connections 錯誤,當然把mysql的max connections引數設定為更大數,不過這是乙個治標不治本的方法。而使用redis的訊息佇列,把使用者發布的訊息暫時儲存...
Redis應用 使用訊息佇列發布微博
在一些使用者創造內容的應用中 如 sns 微博 可能出現1秒有上萬個使用者同時發布訊息的情況,此時如果只只用mysql資料庫,很可能出現 too many connections 的錯誤,當然,我們可以把mysql的max connections引數設定為更大的值,但這是乙個治標不治本的方法。這時,...
微博的訊息佇列
最近一兩年,大部分系統的資料流由基於日誌的離線處理方式轉變成實時的流式處理方式,並逐漸形成幾種通用的使用方式,以下介紹微博的訊息佇列體系。當前的主要訊息佇列分成如圖3部分 1 feed資訊流主流程處理,圖中中間的流程,通過相關mq worker將資料寫入cache redis及mysql,以便使用者...