亚洲成av人片一区二区梦乃_欧美精品123区_久久99久国产精品黄毛片色诱_91蜜桃视频在线

當(dāng)前時(shí)訊:Redis高可用高性能緩存的應(yīng)用系列03 - 緩存過(guò)期淘汰策略L(fǎng)RU、LFU

發(fā)布時(shí)間:2023-04-14 02:24:52
來(lái)源:騰訊云

概述

Redis高可用高性能緩存的應(yīng)用系列的第3篇,主要介紹Redis緩存過(guò)期淘汰策略的知識(shí)點(diǎn)。

Redis過(guò)期鍵刪除策略

Redis設(shè)置key時(shí),都會(huì)設(shè)置一個(gè)過(guò)期時(shí)間,那么當(dāng)過(guò)期時(shí)間到了都是怎么處理的?

Redis同時(shí)使用了惰性過(guò)期和定期過(guò)期兩種方式的緩存淘汰策略。


(資料圖)

惰性過(guò)期:只有當(dāng)這個(gè)key被訪(fǎng)問(wèn)時(shí),才會(huì)判斷是否過(guò)期,過(guò)期則要清理掉,他可以節(jié)省CPU的資源,但是會(huì)浪費(fèi)內(nèi)存的資源,會(huì)出現(xiàn)大量過(guò)的Key沒(méi)有被訪(fǎng)問(wèn)過(guò),從而不會(huì)被清除,導(dǎo)致內(nèi)容占用越來(lái)越大。定期過(guò)期:每隔一段時(shí)間,掃描一定數(shù)量的設(shè)置了過(guò)期時(shí)間的key,假如過(guò)期了則進(jìn)行刪除操作。

定期過(guò)期的執(zhí)行過(guò)程

Redis默認(rèn)每秒進(jìn)行10次過(guò)期掃描:

1.從過(guò)期字典中隨機(jī)選擇20個(gè)key

2.刪除這20個(gè)key中已過(guò)期的

3.如果超過(guò)25%的key過(guò)期,則重復(fù)第一步

同時(shí),為了保證業(yè)務(wù)不受影響,Redis還設(shè)置了掃描的時(shí)間上限,默認(rèn)不會(huì)超過(guò)25ms

內(nèi)存淘汰策略

1.假如內(nèi)存不足時(shí),Redis會(huì)根據(jù)設(shè)置的淘汰策略,刪除一些不常用的數(shù)據(jù),保證Redis的正常使用,所有的前提都是加入鍵的時(shí)候如果超過(guò)Redis內(nèi)存設(shè)定的限制后,Redis采用的服務(wù)。

1.noeviction: 不會(huì)在寫(xiě)入,寫(xiě)入會(huì)報(bào)錯(cuò)。

2.allkeys-lru:首先通過(guò)LRU算法驅(qū)逐最久沒(méi)有使用的鍵

3.volatile-lru:首先從設(shè)置了過(guò)期時(shí)間的鍵集合中驅(qū)逐沒(méi)有最久使用的鍵

4.allkeys-random:從所有過(guò)期字典中的key隨機(jī)刪除

5.volatile-random:從過(guò)期鍵的集合中隨機(jī)驅(qū)逐

6.volatile-ttl:從配置了過(guò)期時(shí)間的鍵中,驅(qū)逐馬上就要過(guò)期的鍵

7.volatile-lfu:從配置了過(guò)期時(shí)間的鍵中驅(qū)逐使用頻率最少得鍵

8.allkeys-lfu:從所有鍵中使用頻率最少的鍵

LRU

根據(jù)最近被使用的時(shí)間,距離當(dāng)前最遠(yuǎn)的數(shù)據(jù)優(yōu)化被淘汰,當(dāng)有新增key 或者是被訪(fǎng)問(wèn)時(shí),元素會(huì)被追加在隊(duì)尾,需要淘汰時(shí)從頭部開(kāi)始淘汰,這個(gè)是LRU的思想。

在Redis redisObject 中,維護(hù)了一個(gè)24位的時(shí)鐘(有點(diǎn)類(lèi)似于Cpu的頻率),可以簡(jiǎn)單理解為Cpu對(duì)內(nèi)存使用的時(shí)間戳,每個(gè)Key對(duì)應(yīng)的也維護(hù)了同樣24位的時(shí)間戳。

比如現(xiàn)在要進(jìn)行LRU,首先拿到當(dāng)前系統(tǒng)的時(shí)間鐘,和Redis redisObject 內(nèi)存的LRU時(shí)間鐘對(duì)差值計(jì)算,差最大的進(jìn)行淘汰,這里需要注意的是,全局時(shí)鐘只有24位,按秒計(jì)算的話(huà),最多可以存儲(chǔ)194天,所以可能出現(xiàn)key時(shí)鐘大于全局時(shí)鐘的情況,但是Redis的LRU不會(huì)對(duì)全局的時(shí)鐘進(jìn)行比對(duì),他會(huì)從設(shè)置了過(guò)期時(shí)間的key中進(jìn)行比對(duì)。

struct redisObject {    unsigned lru:LRU_BITS; /* LRU time (relative to global lru_clock) or                            * LFU data (least significant 8 bits frequency                            * and most significant 16 bits access time). */};

LFU

LRU只考慮了使用的時(shí)間,但是沒(méi)有考慮Key使用的次數(shù),Redis4.0 以后,新增了LFU的淘汰策略,根據(jù)使用時(shí)間和次數(shù)最為淘汰的權(quán)重。

LFU把之前LRU的24bit拆分成兩部分,16bit的時(shí)間鐘和8it的訪(fǎng)問(wèn)頻率,8bit比較小,在源碼的evict文件中給出了數(shù)據(jù)。

uint8_t LFULogIncr(uint8_t counter) {    if (counter == 255) return 255;    double r = (double)rand()/RAND_MAX;    double baseval = counter - LFU_INIT_VAL;    if (baseval < 0) baseval = 0;    double p = 1.0/(baseval*server.lfu_log_factor+1);    if (r < p) counter++;    return counter;}

標(biāo)簽:

AD
更多相關(guān)文章
主站蜘蛛池模板: 精品国产免费人成电影在线观...| 91av在线精品| 国产在线高清精品| 国产美女在线精品免费观看| 午夜精品理论片| 久久99导航| 欧美日韩精品在线一区二区| 中文字幕不卡每日更新1区2区| 国产人妻互换一区二区 | 日韩欧美一区二区视频在线播放V| 国产日产欧美精品| 精品少妇人妻av一区二区| 久久人人97超碰精品888| 欧美乱人伦中文字幕在线| 日韩欧美亚洲日产国| 日韩欧美一区二区三区四区五区 | 亚洲欧洲日韩精品| 99精品国产一区二区| 国产精品自在线| 国产日韩欧美视频在线| 久久亚洲国产精品成人av秋霞| 欧美一区二区三区在线免费观看| 日韩一级在线免费观看| 涩涩日韩在线| 日本精品一区二区三区视频| 日本国产精品视频| 欧美一区二区三区免费视| 欧洲精品久久久| 久久亚洲国产精品成人av秋霞| 久久亚洲私人国产精品va| 久久亚洲免费| 精品一区久久久| 国产日韩欧美精品在线观看| 国产精品一区二区3区| 99色精品视频| 91精品国产91久久久久青草| 亚洲不卡中文字幕无码| 色综合天天狠天天透天天伊人| 日本国产一区二区三区| 久久国产精品亚洲va麻豆| 国产精品欧美在线|