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