使用C++ hiredis 在調(diào)試訂閱數(shù)據(jù)匆帚,一段時間后redis sub 無法讀取到新的pub數(shù)據(jù),發(fā)現(xiàn)是由Redis的輸出緩沖機制導(dǎo)致的旁钧。
Redis 緩存保護機制:
1.?大小限制吸重,當某一客戶端緩沖區(qū)超過設(shè)定值后直接關(guān)閉連接
2. 持續(xù)時間限制互拾,某一客戶端緩沖區(qū)持續(xù)一段時間占用過大空間時關(guān)閉連接
1. 對于普通客戶端來說,限制為0嚎幸,也就是不限制颜矿。因為普通客戶端通常采用阻塞式的消息應(yīng)答模式,何謂阻塞式呢嫉晶?如:發(fā)送請求骑疆,等待返回,再發(fā)送請求替废,再等待返回封断。這種模式下,通常不會導(dǎo)致Redis服務(wù)器輸出緩沖區(qū)的堆積膨脹舶担;
2. 對于slave客戶端來說坡疼,大小限制是256M,持續(xù)性限制是當客戶端緩沖區(qū)大小持續(xù)60秒超過64M衣陶,則關(guān)閉客戶端連接柄瑰。
3. 對于Pub/Sub客戶端(也就是發(fā)布/訂閱模式),大小限制是8M剪况,當輸出緩沖區(qū)超過8M時教沾,會關(guān)閉連接。持續(xù)性限制是译断,當客戶端緩沖區(qū)大小持續(xù)60秒超過2M授翻,則關(guān)閉客戶端連接;
可以直接改成client-output-buffer-limit pubsub 0 0 0孙咪,將hard limit和soft limit同時置0堪唐,關(guān)閉該限制