麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 數(shù)據(jù)庫(kù) > Redis > 正文

如何高效使用Redis作為L(zhǎng)RU緩存

2020-10-28 21:27:04
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

當(dāng)用Redis作為一個(gè)LRU存儲(chǔ)時(shí),有些時(shí)候是比較方便的,在你增添新的數(shù)據(jù)時(shí)會(huì)自動(dòng)驅(qū)逐舊的數(shù)據(jù)。這種行為在開發(fā)者論壇是非常有名的,因?yàn)檫@是流行的memcached系統(tǒng)的默認(rèn)行為。

LRU實(shí)際上只是支持驅(qū)逐的方式之一。這頁(yè)包含更多一般的Redis maxmemory指令的話題用于限制內(nèi)存使用到一個(gè)定額,同時(shí)它也深入的涵蓋了Redis所使用的LRU算法,實(shí)際上是精確LRU的近似值。

一、Maxmemory設(shè)置指令

Maxmemory設(shè)置指令用于配置Redis的數(shù)據(jù)集使用指定量的內(nèi)存。可以用redis conf.file設(shè)置指令,或者可以在稍晚的時(shí)候在運(yùn)行時(shí)間用config set命令。

例如,為了設(shè)置內(nèi)存局限于100百萬(wàn)字節(jié),下列指令可在redis.conf file內(nèi)使用。設(shè)置maxmemory到零使得沒有內(nèi)存限制。這是64位系統(tǒng)的默認(rèn)行為,而32位系統(tǒng)使用3GB內(nèi)隱記憶極限。

maxmemory 100mb

當(dāng)達(dá)到指定量的內(nèi)存后,就可以選擇不同的行為,稱為策略。Redis可以返回錯(cuò)誤的指令,導(dǎo)致使用更多的內(nèi)存,或者為了每次增加新的數(shù)據(jù)后返回指定的內(nèi)存,它可以驅(qū)逐一些舊的數(shù)據(jù)。

二、驅(qū)逐策略

當(dāng)?shù)竭_(dá)maxmemory極限時(shí),使用maxmemory-策略配置指令來(lái)執(zhí)行具體的Redis動(dòng)作。

以下策略可以使用:

1、noeviction:達(dá)到內(nèi)存限額后返回錯(cuò)誤,客戶嘗試可以導(dǎo)致更多內(nèi)存使用的命令(大部分寫命令,但DEL和一些例外)

2、allkeys-lru:為了給新增加的數(shù)據(jù)騰出空間,驅(qū)逐鍵先試圖移除一部分最近使用較少的(LRC)。

3、volatile-lru:為了給新增加的數(shù)據(jù)騰出空間,驅(qū)逐鍵先試圖移除一部分最近使用較少的(LRC),但只限于過(guò)期設(shè)置鍵。

4、allkeys-random: 為了給新增加的數(shù)據(jù)騰出空間,驅(qū)逐任意鍵。

5、volatile-random: 為了給新增加的數(shù)據(jù)騰出空間,驅(qū)逐任意鍵,但只限于有過(guò)期設(shè)置的驅(qū)逐鍵。

6、volatile-ttl: 為了給新增加的數(shù)據(jù)騰出空間,驅(qū)逐鍵只有秘鑰過(guò)期設(shè)置,并且首先嘗試縮短存活時(shí)間的驅(qū)逐鍵。

如果沒有秘鑰去驅(qū)逐匹配先決條件,策略volatile-lru, volatile-random 和volatile-ttl行為很像noeviction。

那么根據(jù)你應(yīng)用的訪問(wèn)模式選擇正確的驅(qū)逐策略是很重要的。然而在應(yīng)用運(yùn)行時(shí)你可以在運(yùn)行時(shí)間重新設(shè)置策略,并且監(jiān)控緩存缺失的數(shù)量并為了調(diào)整你的設(shè)置點(diǎn)擊Redis信息輸出。

三、近似LRU算法

Redis的LRU算法不是準(zhǔn)確的實(shí)現(xiàn)。也就是說(shuō)Redis沒有為逐出選擇 最好的候選人 ,也就是沒有選擇過(guò)去最后被訪問(wèn)離現(xiàn)在最久的。反而 是去執(zhí)行一個(gè) 近似LRU的算法,通過(guò)抽樣少量的key,并且逐出抽樣中最后被訪問(wèn)離現(xiàn)在最久的key(最老的訪問(wèn)時(shí)間)。

在Redis 3.0(目前的測(cè)試版),算法被改進(jìn)了,使用了一個(gè)逐出最佳候選池。改進(jìn)了算法的性能,使它更加近似真正LRU算法。

算法中,關(guān)于逐出檢測(cè)的樣品數(shù)量,你可以自己去調(diào)整。配置參數(shù)是:

maxmemory-samples 5

Redis沒有使用真正實(shí)現(xiàn)LRU算是的原因是,因?yàn)橄母嗟膬?nèi)存。然而對(duì)于使用Redis的應(yīng)用來(lái)說(shuō),事實(shí)上是等價(jià)的。下面是Redis的LRU算法和真正LRU算法的比較:

給出配置數(shù)量的key生成上面的圖表。key從第一行到最后一行被訪問(wèn),那么第一個(gè)key是LRU算法中最好的逐出候選者。之后有50%的key被添加,那么一半的舊key被逐出。

在上圖中你可以看見3個(gè)明顯的區(qū)別:

1、淺灰色帶是被逐出的對(duì)象。

2、灰色帶是沒有被逐出的對(duì)象。

3、綠色帶是被添加的對(duì)象。

LRU理論實(shí)現(xiàn)是在所有的舊key中前一半被逐出。Redis使用的是近似過(guò)期的key被逐出。

如你所見,3.0的工作比2.8更好,然而在2.8版本中,大多數(shù)最新訪問(wèn)對(duì)象的仍然保留。在3.0使用樣品為10 時(shí),性能非常接近理論上的LRU算法。

注意:LRU僅僅是一個(gè)預(yù)測(cè)模式,給出的key很可能在未來(lái)被訪問(wèn)。此外,如果你的數(shù)據(jù)訪問(wèn)模式類似于冪律(線性的),大多數(shù)key都可能被訪問(wèn)那么這個(gè)LRU算法的處理就是非常好的。

在實(shí)戰(zhàn)中 ,我們發(fā)現(xiàn)使用冪律(線性的)的訪問(wèn)模式,在真正的LRU算法和Redis的LRU算法之間差異很小或者不存在差異。

你可以提升樣品大小配置到10,它將接近真正的LRU算法,并且有不同錯(cuò)過(guò)率,但是要消耗更多的CPU。

在調(diào)試時(shí)使用不同的樣品大小去調(diào)試非常簡(jiǎn)單,使用命令CONFIG SET maxmemory-samples 實(shí)現(xiàn)。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 精品一区二区免费视频视频 | 91av在线免费播放 | 毛片在线免费播放 | 天天操很很操 | 国产五区| www.91成人| 99激情 | 福利一区二区三区视频在线观看 | 国产又粗又爽又深的免费视频 | 一级电影在线观看 | 91美女视频在线观看 | 欧美人xx| 全免费午夜一级毛片真人 | h视频免费在线 | 久久久入口 | 久久人添人人爽人人爽人人片av | 成人午夜在线免费 | 全免费午夜一级毛片真人 | 精品久久久久久久久久久aⅴ | 精品一区二区三区中文字幕老牛 | 亚洲国产精品久久久 | 午夜视频在线观看免费视频 | www.成人在线 | 久久久久女人精品毛片九一 | 午夜精品视频免费观看 | 92看片淫黄大片欧美看国产片 | 免费观看高清视频网站 | 欧美色爱综合 | 成人三级视频网站 | 91精品久久香蕉国产线看观看 | 成年人黄色免费电影 | 一级黄色在线免费观看 | 毛片在线视频在线播放 | 97视频一二区 | 日本免费一区二区三区四区 | 国产一级一级片 | 久久久av影视 | 亚洲精华液久久含羞草 | 欧美激情猛片xxxⅹ大3 | 艹男人的日日夜夜 | 九九热视频免费在线观看 |