c# redis 如何设置过期时间_Redis 过期时间与内存管理
- http://www.redis.cn/commands/expire.html
- http://www.redis.cn/topics/lru-cache.html
內(nèi)存管理
當(dāng) Redis 作為緩存使用時(shí)(此時(shí)緩存僅作為熱點(diǎn)數(shù)據(jù)提高服務(wù)的訪問性能),需要考慮內(nèi)存的限制,以及如何隨著業(yè)務(wù)的增長(zhǎng),僅保留熱點(diǎn)數(shù)據(jù)。
過期時(shí)間
Redis 所有的數(shù)據(jù)結(jié)構(gòu)都可以設(shè)置過期時(shí)間,時(shí)間到了,Redis 會(huì)自動(dòng)刪除相應(yīng)的對(duì)象。 需要注意的:
- 過期expire是以對(duì)象為單位,比如一個(gè) hash 結(jié)構(gòu)的過期是整個(gè) hash 對(duì)象的過期,而不是其中的某個(gè)子 key。
- 如果一個(gè)字符串已經(jīng)設(shè)置了過期時(shí)間,然后你調(diào)用了 set 方法修改了它,它的過期時(shí)間會(huì)消失。
淘汰過期的 Keys
Redis keys過期有兩種方式:被動(dòng)和主動(dòng)方式。
- 被動(dòng)
當(dāng)一些客戶端嘗試訪問它時(shí),key會(huì)被發(fā)現(xiàn)并主動(dòng)的過期。
- 主動(dòng)
當(dāng)然,這樣是不夠的,因?yàn)橛行┻^期的keys,永遠(yuǎn)不會(huì)訪問他們。
無論如何,這些keys應(yīng)該過期,所以定時(shí)隨機(jī)測(cè)試設(shè)置keys的過期時(shí)間。所有這些過期的keys將會(huì)從密鑰空間刪除。
具體就是Redis每秒10次做的事情:
- 1.測(cè)試隨機(jī)的20個(gè)keys進(jìn)行相關(guān)過期檢測(cè)。
- 2.刪除所有已經(jīng)過期的keys。
- 3.如果有多于25%的keys過期,重復(fù)步奏1. 這是一個(gè)平凡的概率算法,基本上的假設(shè)是,我們的樣本是這個(gè)密鑰控件,
并且我們不斷重復(fù)過期檢測(cè),直到過期的keys的百分百低于25%,這意味著,在任何給定的時(shí)刻,最多會(huì)清除1/4的過期keys。
內(nèi)存淘汰
在 redis.conf 或 使用 CONFIG 命令配置 Redis的配置項(xiàng):
maxmemory 100mb maxmemory-policy [策略]淘汰策略:
LRU - 最近很少?zèng)]碰
對(duì)最近很少使用(所有或有過期時(shí)間的)的key優(yōu)先淘汰
- allkeys-lru 嘗試回收最少使用的鍵(LRU),使得新添加的數(shù)據(jù)有空間存放。
- volatile-lru 嘗試回收最少使用的鍵(LRU),但僅限于在過期集合的鍵,使得新添加的數(shù)據(jù)有空間存放。
LFU - 沒碰多少次
對(duì)使用頻率最少(所有或有過期時(shí)間的)的key優(yōu)先淘汰
- allkeys-lfu 嘗試回收回收使用頻率最少的鍵(LFU),使得新添加的數(shù)據(jù)有空間存放。
- volatile-lfu 嘗試回收使用頻率最少的鍵(LFU),但僅限于在過期集合的鍵,使得新添加的數(shù)據(jù)有空間存放。
- volatile-ttl 對(duì)有過期時(shí)間的key中ttl最小的部分優(yōu)先淘汰
noeviction 返回錯(cuò)誤
allkeys-random: 回收隨機(jī)的鍵使得新添加的數(shù)據(jù)有空間存放。
volatile-random: 回收隨機(jī)的鍵使得新添加的數(shù)據(jù)有空間存放,但僅限于在過期集合的鍵。
近似LRU算法
Redis的LRU算法并非完整的實(shí)現(xiàn)。這意味著Redis并沒辦法選擇最佳候選來進(jìn)行回收,也就是最久未被訪問的鍵。
相反它會(huì)嘗試運(yùn)行一個(gè)近似LRU的算法,通過對(duì)少量keys進(jìn)行取樣,然后回收其中一個(gè)最好的key(被訪問時(shí)間較早的)。
Redis LRU有個(gè)很重要的點(diǎn),你通過調(diào)整每次回收時(shí)檢查的采樣數(shù)量,以實(shí)現(xiàn)調(diào)整算法的精度。這個(gè)參數(shù)可以通過以下的配置指令調(diào)整:
maxmemory-samples 5@SvenAugustus (https://my.oschina.net/langxSpirit)
總結(jié)
以上是生活随笔為你收集整理的c# redis 如何设置过期时间_Redis 过期时间与内存管理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 何其荣幸什么意思
- 下一篇: C# 监控字段_有哪些好的C#开源项目推