色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

如何快速止血Redis內(nèi)存爆炸式增長(zhǎng)

如何快速止血Redis內(nèi)存爆炸式增長(zhǎng)?

一、分析內(nèi)存

首先,需要弄清楚,是哪些業(yè)務(wù)數(shù)據(jù)占用了大量redis。SCAN命令可以按正則來(lái)匹配Key,結(jié)合目前編碼習(xí)慣,基本都是以'#',':'分隔的key,例如用戶數(shù)據(jù)統(tǒng)一的key前綴為us:{userId}。這樣就可以直接用SCAN命令查出各個(gè)業(yè)務(wù)數(shù)據(jù)的redis key數(shù)量、占用的內(nèi)存(通過(guò)debug obejct得到serializedlength)、過(guò)期時(shí)間。

所以這樣就寫了redis-memory-analysis 求star go-redis-memory-analysis 求star,分析內(nèi)存占用,將結(jié)果導(dǎo)出到csv文件。

再根據(jù)key前綴定位到業(yè)務(wù)代碼,清理或遷移數(shù)據(jù)至其他地方。

這種統(tǒng)計(jì)方式有個(gè)缺點(diǎn),耗時(shí)很久,比如千萬(wàn)的key,需要6小時(shí)才能掃完。

再結(jié)合--bigkeys參數(shù)找出redis中最大的key

redis-cli --bigkeys

二、Redis maxmemory與maxmemory-policy

maxmemory設(shè)置最大內(nèi)存,達(dá)到最大內(nèi)存設(shè)置后,redis根據(jù)maxmemory-policy配置的策略來(lái)清理數(shù)據(jù) 釋放空間

maxmemory-policy:

noeviction:返回錯(cuò)誤當(dāng)內(nèi)存限制達(dá)到并且客戶端嘗試執(zhí)行會(huì)讓更多內(nèi)存被使用的命令(大部分的寫入指令,但DEL和幾個(gè)例外) r> allkeys-lru: 嘗試回收最少使用的鍵(LRU),使得新添加的數(shù)據(jù)有空間存放。

volatile-lru: 嘗試回收最少使用的鍵(LRU),但僅限于在過(guò)期集合的鍵,使得新添加的數(shù)據(jù)有空間存放。

allkeys-random: 回收隨機(jī)的鍵使得新添加的數(shù)據(jù)有空間存放。

volatile-random: 回收隨機(jī)的鍵使得新添加的數(shù)據(jù)有空間存放,但僅限于在過(guò)期集合的鍵。

volatile-ttl: 回收在過(guò)期集合的鍵,并且優(yōu)先回收存活時(shí)間(TTL)較短的鍵,使得新添加的數(shù)據(jù)有空間存放。

如果沒(méi)有鍵滿足回收的前提條件的話,策略volatile-lru, volatile-random以及volatile-ttl就和noeviction 差不多了。

選擇正確的回收策略是非常重要的,這取決于你的應(yīng)用的訪問(wèn)模式,不過(guò)你可以在運(yùn)行時(shí)進(jìn)行相關(guān)的策略調(diào)整,并且監(jiān)控緩存命中率和沒(méi)命中的次數(shù),通過(guò)RedisINFO命令輸出以便調(diào)優(yōu)。

一般的經(jīng)驗(yàn)規(guī)則:

使用allkeys-lru策略:當(dāng)你希望你的請(qǐng)求符合一個(gè)冪定律分布,也就是說(shuō),你希望部分的子集元素將比其它其它元素被訪問(wèn)的更多。如果你不確定選擇什么,這是個(gè)很好的選擇。.

使用allkeys-random:如果你是循環(huán)訪問(wèn),所有的鍵被連續(xù)的掃描,或者你希望請(qǐng)求分布正常(所有元素被訪問(wèn)的概率都差不多)。

使用volatile-ttl:如果你想要通過(guò)創(chuàng)建緩存對(duì)象時(shí)設(shè)置TTL值,來(lái)決定哪些對(duì)象應(yīng)該被過(guò)期。

allkeys-lru 和 volatile-random策略對(duì)于當(dāng)你想要單一的實(shí)例實(shí)現(xiàn)緩存及持久化一些鍵時(shí)很有用。不過(guò)一般運(yùn)行兩個(gè)實(shí)例是解決這個(gè)問(wèn)題的更好方法。

為了鍵設(shè)置過(guò)期時(shí)間也是需要消耗內(nèi)存的,所以使用allkeys-lru這種策略更加高效,因?yàn)闆](méi)有必要為鍵取設(shè)置過(guò)期時(shí)間當(dāng)內(nèi)存有壓力時(shí)。