日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > C# >内容正文

C#

c# redis 如何设置过期时间_Redis 过期时间与内存管理

發(fā)布時(shí)間:2023/12/3 C# 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c# redis 如何设置过期时间_Redis 过期时间与内存管理 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
  • 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ì)消失。
127.0.0.1:6379> set k1 aaa OK 127.0.0.1:6379> expire k1 600 (integer) 1 127.0.0.1:6379> ttl k1 (integer) 597 127.0.0.1:6379> set k1 bbb OK 127.0.0.1:6379> ttl k1 (integer) -1...

淘汰過期的 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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。