redis緩存策略哪幾種

redis用作緩存時, 如果內(nèi)存空間用滿, 就會自動驅(qū)逐老的數(shù)據(jù)。 默認情況下memcached就是這種方式, 大部分開發(fā)者都比較熟悉。lru是redis唯一支持的回收算法.?

redis緩存策略哪幾種

驅(qū)逐策略(推薦學習:Redis視頻教程

達到最大內(nèi)存限制時(maxmemory), Redis 根據(jù) maxmemory-policy 配置的策略, 來決定具體的行為。

當前版本,Redis 3.0 支持的策略包括:

noeviction: 不刪除策略, 達到最大內(nèi)存限制時, 如果需要更多內(nèi)存, 直接返回錯誤信息。 大多數(shù)寫命令都會導致占用更多的內(nèi)存(有極少數(shù)會例外, 如 DEL )。

allkeys-lru: 所有key通用; 優(yōu)先刪除最近最少使用(less recently used ,LRU) 的 key。

volatile-lru: 只限于設置了 expire 的部分; 優(yōu)先刪除最近最少使用(less recently used ,LRU) 的 key。

allkeys-random: 所有key通用; 隨機刪除一部分 key。

volatile-random: 只限于設置了 expire 的部分; 隨機刪除一部分 key。

volatile-ttl: 只限于設置了 expire 的部分; 優(yōu)先刪除剩余時間(time to live,TTL) 短的key。

如果沒有設置 expire 的key, 不滿足先決條件(prerequisites); 那么 volatile-lru, volatile-random 和 volatile-ttl 策略的行為, 和 noeviction(不刪除) 基本上一致。

您需要根據(jù)系統(tǒng)的特征, 來選擇合適的驅(qū)逐策略。 當然, 在運行過程中也可以通過命令動態(tài)設置驅(qū)逐策略, 并通過 INFO 命令監(jiān)控緩存的 miss 和 hit, 來進行調(diào)優(yōu)。

一般來說:

如果分為熱數(shù)據(jù)與冷數(shù)據(jù), 推薦使用 allkeys-lru 策略。 也就是, 其中一部分key經(jīng)常被讀寫. 如果不確定具體的業(yè)務特征, 那么 allkeys-lru 是一個很好的選擇。

如果需要循環(huán)讀寫所有的key, 或者各個key的訪問頻率差不多, 可以使用 allkeys-random 策略, 即讀寫所有元素的概率差不多。

假如要讓 Redis 根據(jù) TTL 來篩選需要刪除的key, 請使用 volatile-ttl 策略。

volatile-lru 和 volatile-random 策略主要應用場景是: 既有緩存,又有持久key的實例中。 一般來說, 像這類場景, 應該使用兩個單獨的 Redis 實例。

值得一提的是, 設置 expire 會消耗額外的內(nèi)存, 所以使用 allkeys-lru 策略, 可以更高效地利用內(nèi)存, 因為這樣就可以不再設置過期時間了。

更多Redis相關(guān)技術(shù)文章,請訪問Redis視頻教程欄目進行學習!

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點贊14 分享