當(dāng)達(dá)到maxmemory限制時(shí)习霹,Redis會(huì)使用由maxmemory-policy配置的行為。
- noeviction:不進(jìn)行置換,表示即使內(nèi)存達(dá)到上限也不進(jìn)行置換崖瞭,所有能引起內(nèi)存增加的命令都會(huì)返回error
- allkeys-lru: 優(yōu)先刪除掉最近最不經(jīng)常使用的key,用以保存新數(shù)據(jù)
- allkeys-random: 隨機(jī)回收一些key撑毛,使得新添加的數(shù)據(jù)有空間存放
- volatile-lru: 只從設(shè)置失效(expire set)的key中選擇最近最不經(jīng)常使用的key進(jìn)行刪除书聚,用以保存新數(shù)據(jù)
- volatile-random: 只從設(shè)置失效(expire set)的key中,選擇一些key進(jìn)行刪除藻雌,用以保存新數(shù)據(jù)
- volatile-ttl: 只從設(shè)置失效(expire set)的key中雌续,選出存活時(shí)間(TTL)最短的key進(jìn)行刪除,用以保存新數(shù)據(jù)
一般來(lái)說(shuō)胯杭,有這樣一些常用的經(jīng)驗(yàn):
- 在所有的 key 都是最近最經(jīng)常使用驯杜,那么就需要選擇 allkeys-lru 進(jìn)行置換最近最不經(jīng)常使用的 key,如果你不確定使用哪種策略做个,那么推薦使用 allkeys-lru
- 如果所有的 key 的訪問(wèn)概率都是差不多的鸽心,那么可以選用 allkeys-random 策略去置換數(shù)據(jù)
- 如果對(duì)數(shù)據(jù)有足夠的了解,能夠?yàn)?key 指定 hint(通過(guò)expire/ttl指定)居暖,那么可以選擇 volatile-ttl 進(jìn)行置換
volatile-lru 和 volatile-random 經(jīng)常在一個(gè)Redis實(shí)例既做cache又做持久化的情況下用到顽频,然而,更好的選擇使用兩個(gè)Redis實(shí)例來(lái)解決這個(gè)問(wèn)題太闺。
設(shè)置是失效時(shí)間 expire 會(huì)占用一些內(nèi)存糯景,而采用 allkeys-lru 就沒(méi)有必要設(shè)置失效時(shí)間,進(jìn)而更有效的利用內(nèi)存省骂。