您现在的位置是:Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款 >
04 redis發布訂閱實現聊天 php(php 后臺怎么開一個進程監聽Redis的隊列消息呢?用while)
Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款2024-06-04 16:11:52【】1人已围观
简介 publicfunction__買粉絲nstruct($host='127.0.0.1',$port=6379)
{
$this->redis = newRedis();
$this->redis->買粉絲nnect($host, $port);
}
publicfunctionsetex($key, $time, $val)
{
return$this->redis->setex($key, $time, $val);
}
publicfunctionset($key, $val)
{
return$this->redis->set($key, $val);
}
publicfunctionget($key)
{
return$this->redis->get($key);
}
publicfunctionexpire($key= null, $time= 0)
{
return$this->redis->expire($key, $time);
}
publicfunctionpsubscribe($patterns= array(), $callback)
{
$this->redis->psubscribe($patterns, $callback);
}
publicfunctionsetOption()
{
$this->redis->setOption(\Redis::OPT_READ_TIMEOUT, -1);
}
}
過期事件的訂閱:
psubscribe.php
1個
2
3
4
5
6
7
8
9
10
11
12
13
14
15
require_once'./Redis.class.php';
$redis= new\Redis2();
// 解決Redis客戶端訂閱時候超時情況
$redis->setOption();
$redis->psubscribe(array('__keyevent@0__:expired'), 'keyCallback');
// 回調函數,這里寫處理邏輯
functionkeyCallback($redis, $pattern, $chan, $msg)
{
echo"Pattern: $pattern\n";
echo"Channel: $chan\n";
echo"Payl
oad: $msg\n\n";
//keyCallback為訂閱事件后的回調函數,這里寫業務處理邏輯,
//比如前面提到的商品不支付自動撤單,這里就可以根據訂單id,來實現自動撤單
}
設置過期事件:
index.php
1個
2
3
4
require_once'./Redis.class.php';
$redis= new\Redis2();
$order_id= 123;
$redis->setex('order_id',10,$order_id);
先用命令行模式執行 psubscribe.php
在瀏覽器訪問 index.php
效果如下:
redis主要解決了什么問題
Redis 常見的性能問題和解決方法
1.Master寫內存快照
save命令調度rdbSave函數,會阻塞主線程的工作,當快照比較大時對性能影響是非常大的,會間斷性暫停服務,所以Master最好不要寫內存快照。
2.Master AOF持久化
如果不重寫AOF文件,這個持久化方式對性能的影響是最小的,但是AOF文件會不斷增大,AOF文件過大會影響Master重啟的恢復速度。
3.Master調用BGREWRITEAOF
Master調用BGREWRITEAOF重寫AOF文件,AOF在重寫的時候會占大量的CPU和內存資源,導致服務load過高,出現短暫服務暫停現象。
下面是我的一個實際項目的情況,大概情況是這樣的:一個Master,4個Slave,沒有Sharding機制,僅是讀寫分離,Master負責寫入操作和AOF日志備份,AOF文件大概5G,Slave負責讀操作,當Master調用BGREWRITEAOF時,Master和Slave負載會突然陡增,Master的寫入請求基本上都不響應了,持續了大概5分鐘,Slave的讀請求過也半無法及時響應,Master和Slave的服務器負載圖如下:
Master Server load:
Slave server load:
上面的情況本來不會也不應該發生的,是因為以前Master的這個機器是Slave,在上面有一個shell定時任務在每天的上午10點調用BGREWRITEAOF重寫AOF文件,后來由于Master機器down了,就把備份的這個Slave切成Master了,但是這個定時任務忘記刪除了,就導致了上面悲劇情況的發生,原因還是找了幾天才找到的。
將no-appendfsync-on-rewrite的配置設為yes可以緩解這個問題,設置為yes表示rewrite期間對新寫操作不fsync,暫時存在內存中,等rewrite完成后再寫入。最好是不開啟Master的AOF備份功能。
4.Redis主從復制的性能問題
第一次Slave向Master同步的實現是:Slave向Master發出同步請求,Master先mp出rdb文件,然后將rdb文件全量傳輸給slave,然后Master把緩存的命令轉發給Slave,初次同步完成。第二次以及以后的同步實現是:Master將變量的快照直接實時依次發送給各個Slave。不管什么原因導致Slave和Master斷開重連都會重復以上過程。Redis的主從復制是建立在內存快照的持久化基礎上,只要有Slave就一定會有內存快照發生。雖然Redis宣稱主從復制無阻塞,但由于Redis使用單線程服務,如果Master快照文件比較大,那么第一次全量傳輸會耗費比較長時間,且文件傳輸過程中Master可能無法提供服務,也就是說服務會中斷,對于關鍵服務,這個后果也是很可怕的。
以上1.2.3.4根本問題的原因都離不開系統io瓶頸問題,也就是硬盤讀寫速度不夠快,主進程 fsync()/write() 操作被阻塞。
5.單點故障問題
由于目前Redis的主從復制還不夠成熟,所以存在明顯的單點故障問題,這個目前只能自己做方案解決,如:主動復制,Proxy實現Slave對Master的替換等,這個也是Redis作者目前比較優先的任務之一,作者的解決方案思路簡單優雅,詳情可見 Redis Sentinel design draft
總結
Master最好不要做任何持久化工作,包括內存快照和AOF日志文件,特別是不要啟用內存快照做持久化。
如果數據比較關鍵,某個Slave開啟AOF備份數據,策略為每秒同步一次。
為了主從復制的速度和連接的穩定性,Slave和Master最好在同一個局域網內。
盡量避免在壓力較大的主庫上增加從庫
為了Master的穩定性,主從復制不要用圖狀結構,用單向鏈表結構更穩定,即主從關系為:Master<–Slave1<–Slave2<–Slave3…….,這樣的結構也方便解決單點故障問題,實現Slave對Master的替換,也即,如果Master掛了,可以立馬啟用Slave1做
很赞哦!(3)
相关文章
- 15 download youtube to mp3 player download 買粉絲(P2P買粉絲怎么加速)
- 01 中國被困海外華人都在哪個國家(華人華僑 海外主要分布在哪些國家)
- 01 中國聯通河南客服買粉絲買粉絲怎么不管用了(買粉絲中國聯通河南客服怎么換綁)
- 01 中國自由貿易試驗區的發展已形成了什么的格局(我國已轉向什么階段,同時我國發展什么問題仍然突出?)
- 01 中國設立自由貿易試驗區的意義(上海自貿區的意義是什么?)
- 14 youtube官網網頁版打開很多個pdf合成一個(明星玩的像電腦樣直板的那是什么(就觸屏的,像電腦,但卻是像一塊板,平 平的) 可以用來做什么???)
- 01 中國節氣日歷訂閱url(中國節假日日歷訂閱url服務器是什么意思)
- 14 揭陽市恒豐汽車貿易有限公司(汽車前擋風玻璃怎么區分進口和國產?)
- 01 中國自由貿易試驗區掛牌時間(中國自貿區有幾個?分別在什么時候成立的?)
- 15 買粉絲 channel art for youtube(請推薦一下里面有好聽的歌曲的歐美電影)
热门文章
站长推荐
15 youtube to mp3 320kbps youtube music下載到(Marie.Digby.-.[Unfold].專輯 給個地址,最好無損,其次ogg,最次MP3 320k)
14 成都金龍陽貿易有限公司(上海有哪些好玩的景點)
15 youtube to mp3 買粉絲 app下載電腦版免費(2007年影響人類生活的十大IT產品)
01 中國自由貿易試驗區青島片區前灣保稅港區(青島場外市場清算中心有限公司電話是多少?)
01 中國船舶工業貿易上海有限公司是國企嗎(中石油是國企還是央企)
14 立信化工貿易有限公司(「深度」廣州浪奇黑洞越來越大,貿易業務系統性造假?)
15 easy 買粉絲 ideas for youtube(幫忙翻譯一段IPHONE廣告)
14 東盟對外貿易現狀及對策(我國外貿可持續發展的現狀是什么?)