緩沖區(qū)的應(yīng)用場(chǎng)景 :
- 客戶端與服務(wù)器端的通信時(shí),暫存客戶端發(fā)送的命令數(shù)據(jù),或暫存服務(wù)器端返給客戶端的數(shù)據(jù)結(jié)果
- 主從節(jié)點(diǎn)間進(jìn)行數(shù)據(jù)同步時(shí),暫存主節(jié)點(diǎn)接收的寫命令和數(shù)據(jù)
客戶端
緩沖區(qū) : 避免客戶端和服務(wù)器端的請(qǐng)求發(fā)送和處理速度不匹配
- 服務(wù)器給每個(gè)連接的客戶端都準(zhǔn)備個(gè)輸入緩沖區(qū) , 輸出緩沖區(qū)
輸入緩沖區(qū)
輸入緩沖區(qū)的溢出情況 :
- 寫入 bigkey,如 : 一次寫入百萬(wàn)級(jí)別的集合數(shù)據(jù)
- 服務(wù)器端處理請(qǐng)求的速度過(guò)慢,如 : Redis 主線程出現(xiàn)阻塞,導(dǎo)致輸入緩沖區(qū)積累過(guò)多
查看輸入緩沖區(qū)情況 :
-
cmd
: 客戶端最新執(zhí)行的命令。如 : CLIENT -
qbuf
: 輸入緩沖區(qū)已用的大小。如 : 已用 26 字節(jié) -
qbuf-free
: 輸入緩沖區(qū)未用的大小。如 : 未用 32742 字節(jié)的緩沖區(qū) -
qbuf
和qbuf-free
的總和 : 該客戶端分配的緩沖區(qū)總大小 (26 + 32742 = 32768 字節(jié) = 32KB)
CLIENT LIST
id=5 addr=127.0.0.1:50487 fd=9 name= age=4 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=26 qbuf-free=32742 obl=0 oll=0 omem=0 events=r cmd=client
Redis 的每個(gè)客戶端輸入緩沖區(qū)大小的上限閾值固定 (1 GB)
- 當(dāng)多個(gè)客戶端的占用內(nèi)存總量 > Redis 的
maxmemory
(如 : 4GB),就會(huì)觸發(fā) Redis 數(shù)據(jù)淘汰 , 進(jìn)而導(dǎo)致性能低下
輸出緩沖區(qū)
輸出緩沖區(qū)有 2 個(gè)緩沖區(qū) :
- 固定緩沖空間 : 大小為 16KB,暫存 OK 響應(yīng)和出錯(cuò)信息
- 動(dòng)態(tài)增加的緩沖空間 : 暫存大小可變的響應(yīng)結(jié)果
輸出緩沖區(qū)溢出情況 :
- 返回 bigkey 的大量結(jié)果 : 會(huì)占用大量的內(nèi)存空間
- 執(zhí)行
MONITOR
: 會(huì)持續(xù)占用輸出緩沖區(qū) - 緩沖區(qū)大小設(shè)置不合理
監(jiān)測(cè) Redis 每個(gè)命令 :
- 建議用測(cè)試環(huán)境
MONITOR
OK
1600617456.437129 [0 127.0.0.1:50487] "COMMAND"
1600617477.289667 [0 127.0.0.1:50487] "info" "memory"
讀寫命令交互客戶端的設(shè)置緩沖區(qū)大小 :
- normal : 設(shè)置對(duì)象是普通客戶端
- 第 1 個(gè) 0 : 緩沖區(qū)大小限制
- 第 2 個(gè) 0 : 緩沖區(qū)持續(xù)寫入量限制
- 第 3 個(gè) 0 : 持續(xù)寫入時(shí)間限制
- 0 : 不限制
client-output-buffer-limit normal 0 0 0
訂閱客戶端設(shè)置緩沖區(qū)大小 :
- pubsub : 設(shè)置對(duì)象 : 訂閱客戶端
- 8mb : 輸出緩沖區(qū)上限 : 8MB,> 8MB,就關(guān)閉客戶端的連接
- 2mb 和 60 : 連續(xù) 60 秒內(nèi)對(duì)輸出緩沖區(qū)的寫入量 > 2MB ,就關(guān)閉客戶端連接
client-output-buffer-limit pubsub 8mb 2mb 60
主從緩沖區(qū)
主從集群間的數(shù)據(jù)復(fù)制有 2 種 :
- 全量復(fù)制 : 同步所有數(shù)據(jù)
- 增量復(fù)制 : 只收集主從庫(kù)網(wǎng)絡(luò)斷連時(shí)的命令,同步給從庫(kù)
復(fù)制緩沖區(qū)
主節(jié)點(diǎn)向從節(jié)點(diǎn)傳輸 RDB 時(shí),會(huì)繼續(xù)接收客戶端的寫請(qǐng)求
- 把寫命令先保存在復(fù)制緩沖區(qū)中,等 RDB 傳輸完成后,再發(fā)送給從節(jié)點(diǎn)執(zhí)行
避免復(fù)制緩沖區(qū)發(fā)生溢出 :
- 控制主節(jié)點(diǎn)的內(nèi)存大小 , 建議 : 2~4 G
- 設(shè)置合理復(fù)制緩沖區(qū)大小
復(fù)制緩沖區(qū)大小 :
- slave : 對(duì)復(fù)制緩沖區(qū)
- 512mb : 緩沖區(qū)大小的上限為 512MB
- 128mb 和 60 : 連續(xù) 60 秒內(nèi)的寫入量 > 128MB 時(shí),觸發(fā)緩沖區(qū)溢出
- 例子 : 一條寫命令大小 : 1KB,復(fù)制緩沖區(qū)能累積 512K 條 (512MB/1KB = 512K)。寫命令速率上限是 2000 條 /s(128MB/1KB/60 約等于 2000)
config set client-output-buffer-limit slave 512mb 128mb 60
復(fù)制積壓緩沖區(qū)
主節(jié)點(diǎn)會(huì)把收到的寫命令寫入復(fù)制積壓緩沖區(qū) (repl_backlog_buffer)文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-469654.html
- 當(dāng)從節(jié)點(diǎn)發(fā)生網(wǎng)絡(luò)閃斷,再與主節(jié)點(diǎn)連接后,從節(jié)點(diǎn)就從復(fù)制積壓緩沖區(qū)中,讀取斷連開(kāi)時(shí)的寫命令,進(jìn)行增量同步
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-469654.html
到了這里,關(guān)于Redis 緩沖區(qū)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!