client-output-buffer-limit pubsub
如果客戶端訂閱了某些頻道,但是產生消息的速度大于消費的速度,積壓的消息導致Redis的輸出緩沖區越來越大,這會導致Redis的速度變慢甚至崩潰,也可能導致Redis被操作系統強制殺死,甚至操作系統本身不可用。
新的Redis(大概是在2.6以后的版本加入的)通過client-output-buffer-limit的參數來避免這種情況的出現,不同類型的客戶端有不同的限制參數。目前支持3種客戶端,分別是:
1.normal => normal clients;
2.slave clients and MONITOR clients;
3.pubsub => clients subcribed to at least one pubsub channel or pattern
限制方式有如下兩種:1.大小限制,當某一個客戶端的緩沖區超過某一個大小值時,直接關閉這個客戶端的連接;2.持續性限制,當某一個客戶端的緩沖區持續一段時間占用過大空間時,會直接關閉客戶端連接。
這個參數在redis.conf文件中可以修改。
client-output-buffer-limit normal 0 0 0client-output-buffer-limit slave 256mb 64mb 60client-output-buffer-limit pubsub 8mb 2mb 60
對于普通客戶端來說,限制為0,也就是不限制。因為普通客戶端通常采用阻塞式的消息應答模式,何謂阻塞式呢?如:發送請求,等待返回,再發送請求,再等待返回。這種模式下,通常不會導致Redis服務器輸出緩沖區的堆積膨脹;對于slave客戶端來說,大小限制是128M,持續性限制是當客戶端緩沖區大小持續60秒超過64M,則關閉客戶端連接。對于Pub/Sub客戶端(也就是發布/訂閱模式),大小限制是8M,當輸出緩沖區超過8M時,會關閉連接。持續性限制是,當客戶端緩沖區大小持續60秒超過2M,則關閉客戶端連接;
新聞熱點
疑難解答