【94期】面試官:熟悉Redis嗎,項目中你是如何對Redis內(nèi)存進行優(yōu)化的
閱讀本文大概需要 5 分鐘。
來自:cnblogs.com/niejunlei/p/12898225.html
一、reids 內(nèi)存分析


226893824/209522728≈1.08,使用的內(nèi)存分配器是jemalloc。used_memory_rss?通常情況下是大于?used_memory?的,因為內(nèi)存碎片的存在。二、redis 內(nèi)存使用
https://www.cnblogs.com/niejunlei/p/12896605.html
1、對象內(nèi)存
k-size + v-size。2、緩沖內(nèi)存
1)客戶端緩存
client-output-buffer-limit slave 256mb 64mb 60。maxclients最大連接數(shù)配置必不可少。
合理預(yù)估單次操作數(shù)據(jù)量(寫或讀)及網(wǎng)絡(luò)時延ttl。
禁止線上大吞吐量命令操作,如keys等。
2)復(fù)制積壓緩沖區(qū)
repl-backlog-size,默認1M。單個主節(jié)點配置一個復(fù)制積壓緩沖區(qū)。3)AOF緩沖區(qū)
3、內(nèi)存碎片內(nèi)存占用
三、redis 子進程內(nèi)存消耗
1、關(guān)于linux系統(tǒng)的寫時復(fù)制機制:
2、關(guān)于linux的透明大頁機制THP(Transparent Huge Page):
3、關(guān)于linux配置:
vm.overcommit_memory=1,以允許系統(tǒng)可以分配所有的物理內(nèi)存。防止fork任務(wù)因內(nèi)存而失敗。四、redis 內(nèi)存管理
1、內(nèi)存上限:maxmemory
config set maxmemory {}。2、內(nèi)存回收
1)過期鍵刪除:

需要說明的一點是,快慢模式執(zhí)行的刪除邏輯相同,這是超時時間不同。
2)內(nèi)存溢出控制
noevication:默認不回收,達到內(nèi)存上限,則不再接受寫操作,并返回錯誤。
volatile-lru:根據(jù)LRU算法刪除設(shè)置了過期時間的鍵,如果沒有則不執(zhí)行回收。
allkeys-lru:根據(jù)LRU算法刪除鍵,針對所有鍵。
allkeys-random:隨機刪除鍵。
volatitle-random:速記刪除設(shè)置了過期時間的鍵。
volatilte-ttl:根據(jù)鍵ttl,刪除最近過期的鍵,同樣如果沒有設(shè)置過期的鍵,則不執(zhí)行刪除。
config set maxmemory-policy {}maxmemory>used_memory。推薦閱讀:
【93期】經(jīng)典面試題:Redis 內(nèi)存滿了怎么辦?
【92期】面試官:你說你精通Java并發(fā),那給我講講J.U.C吧
【91期】面試官:Spring 用了哪些設(shè)計模式?說三種即可
微信掃描二維碼,關(guān)注我的公眾號
朕已閱?
評論
圖片
表情

