Expire
Redis的數(shù)據(jù)可以采用expire命令 設(shè)置過期時(shí)間胯努,到了過期時(shí)間之后reids并不是立即將過期的key刪除添坊;
而是采用了兩種方式來進(jìn)行過期key的處理:
定期刪除:redis默認(rèn)每隔1000ms隨機(jī)獲取部分key屉符,如果已經(jīng)過期就將對(duì)應(yīng)的key刪除匠楚;
惰性刪除:在每次訪問key的時(shí)候回檢查key是否已經(jīng)過期雏亚,如果過期就將對(duì)應(yīng)的key刪除偿乖;
內(nèi)存淘汰策略
redis配置文件中有個(gè)maxMemory參數(shù)击罪,當(dāng)內(nèi)存中的數(shù)據(jù)達(dá)到該最大內(nèi)存的配置,新的數(shù)據(jù)寫入會(huì)執(zhí)行淘汰策略贪薪;
maxMemory如果設(shè)置為0媳禁,表示不限制,當(dāng)系統(tǒng)內(nèi)存不足以容納新的寫入數(shù)據(jù)的場(chǎng)景下画切,redis同樣會(huì)采取內(nèi)存淘汰策略:
1. noeviction: 內(nèi)存不足以寫入新數(shù)據(jù)的情況下**直接報(bào)異常**竣稽;
2. allkeys-lru: 在**所有數(shù)據(jù)集中**將最少是用的數(shù)據(jù)移除;
3. allkeys-random:在**所有數(shù)據(jù)集中** 隨機(jī)移除一些數(shù)據(jù)霍弹;
4. volatile-ttl: 在**設(shè)置過期的數(shù)據(jù)集**中選最早過期的數(shù)據(jù)進(jìn)行移除毫别;
5. volatile-random:在**設(shè)置過期的數(shù)據(jù)集**中隨機(jī)選擇部分?jǐn)?shù)據(jù)移除;
6. volatile-lru:在**設(shè)置過期的數(shù)據(jù)集**中移除最少使用的數(shù)據(jù)典格;
內(nèi)存淘汰策略設(shè)置默認(rèn)是 noeviction;
# maxmemory-policy noeviction
LRU
redis采用的LRU是非精準(zhǔn)的LRU算法岛宦,基于抽樣實(shí)現(xiàn);
由于redis是單線程的钝计,如果采用全量的數(shù)據(jù)進(jìn)行LRU計(jì)算恋博,會(huì)比較消耗CPU資源;
因此私恬,redis提供了一個(gè)重要參數(shù):
# maxmemory-samples 5
該參數(shù)表示,每次隨機(jī)選出5個(gè)不經(jīng)常使用的key進(jìn)行移除炼吴;
配置的 參數(shù)值越大本鸣,其LRU結(jié)果能接近全量LRU的結(jié)果;
但同時(shí)會(huì)給CPU帶來比較大的開銷硅蹦,因此如果僅僅將redis作為L(zhǎng)RU緩存服務(wù)使用荣德,建議保持默認(rèn)配置即可闷煤。
備注:了解一下LRU算法和LRU算法實(shí)現(xiàn);