校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁(yè) > 知識(shí)庫(kù) > Redis 對(duì)過(guò)期數(shù)據(jù)的處理方法

Redis 對(duì)過(guò)期數(shù)據(jù)的處理方法

熱門(mén)標(biāo)簽:b2b外呼系統(tǒng) 四川穩(wěn)定外呼系統(tǒng)軟件 一個(gè)地圖標(biāo)注多少錢(qián) 地圖標(biāo)注工廠入駐 南京手機(jī)外呼系統(tǒng)廠家 廊坊外呼系統(tǒng)在哪買(mǎi) 高碑店市地圖標(biāo)注app 400電話辦理的口碑 臺(tái)灣電銷(xiāo)

在 redis 中,對(duì)于已經(jīng)過(guò)期的數(shù)據(jù),Redis 采用兩種策略來(lái)處理這些數(shù)據(jù),分別是惰性刪除和定期刪除

惰性刪除

惰性刪除不會(huì)去主動(dòng)刪除數(shù)據(jù),而是在訪問(wèn)數(shù)據(jù)的時(shí)候,再檢查當(dāng)前鍵值是否過(guò)期,如果過(guò)期則執(zhí)行刪除并返回 null 給客戶端,如果沒(méi)有過(guò)期則返回正常信息給客戶端。

它的優(yōu)點(diǎn)是簡(jiǎn)單,不需要對(duì)過(guò)期的數(shù)據(jù)做額外的處理,只有在每次訪問(wèn)的時(shí)候才會(huì)檢查鍵值是否過(guò)期,缺點(diǎn)是刪除過(guò)期鍵不及時(shí),造成了一定的空間浪費(fèi)。

源碼

robj *lookupKeyReadWithFlags(redisDb *db, robj *key, int flags) {
 robj *val;

 if (expireIfNeeded(db,key) == 1) {
  /* Key expired. If we are in the context of a master, expireIfNeeded()
   * returns 0 only when the key does not exist at all, so it's safe
   * to return NULL ASAP. */
  if (server.masterhost == NULL) {
   server.stat_keyspace_misses++;
   notifyKeyspaceEvent(NOTIFY_KEY_MISS, "keymiss", key, db->id);
   return NULL;
  }

  /* However if we are in the context of a slave, expireIfNeeded() will
   * not really try to expire the key, it only returns information
   * about the "logical" status of the key: key expiring is up to the
   * master in order to have a consistent view of master's data set.
   *
   * However, if the command caller is not the master, and as additional
   * safety measure, the command invoked is a read-only command, we can
   * safely return NULL here, and provide a more consistent behavior
   * to clients accessign expired values in a read-only fashion, that
   * will say the key as non existing.
   *
   * Notably this covers GETs when slaves are used to scale reads. */
  if (server.current_client 
   server.current_client != server.master 
   server.current_client->cmd 
   server.current_client->cmd->flags  CMD_READONLY)
  {
   server.stat_keyspace_misses++;
   notifyKeyspaceEvent(NOTIFY_KEY_MISS, "keymiss", key, db->id);
   return NULL;
  }
 }
 val = lookupKey(db,key,flags);
 if (val == NULL) {
  server.stat_keyspace_misses++;
  notifyKeyspaceEvent(NOTIFY_KEY_MISS, "keymiss", key, db->id);
 }
 else
  server.stat_keyspace_hits++;
 return val;
}

定期刪除

定期刪除:Redis會(huì)周期性的隨機(jī)測(cè)試一批設(shè)置了過(guò)期時(shí)間的key并進(jìn)行處理。測(cè)試到的已過(guò)期的key將被刪除。

具體的算法如下:

  • Redis配置項(xiàng)hz定義了serverCron任務(wù)的執(zhí)行周期,默認(rèn)為10,代表了每秒執(zhí)行10次;
  • 每次過(guò)期key清理的時(shí)間不超過(guò)CPU時(shí)間的25%,比如hz默認(rèn)為10,則一次清理時(shí)間最大為25ms;
  • 清理時(shí)依次遍歷所有的db;
  • 從db中隨機(jī)取20個(gè)key,判斷是否過(guò)期,若過(guò)期,則逐出;
  • 若有5個(gè)以上key過(guò)期,則重復(fù)步驟4,否則遍歷下一個(gè)db;
  • 在清理過(guò)程中,若達(dá)到了25%CPU時(shí)間,退出清理過(guò)程;

雖然redis的確是不斷的刪除一些過(guò)期數(shù)據(jù),但是很多沒(méi)有設(shè)置過(guò)期時(shí)間的數(shù)據(jù)也會(huì)越來(lái)越多,那么redis內(nèi)存不夠用的時(shí)候是怎么處理的呢?這里我們就會(huì)談到淘汰策略

Redis內(nèi)存淘汰策略

當(dāng)redis的內(nèi)存超過(guò)最大允許的內(nèi)存之后,Redis會(huì)觸發(fā)內(nèi)存淘汰策略,刪除一些不常用的數(shù)據(jù),以保證redis服務(wù)器的正常運(yùn)行

在redis 4.0以前,redis的內(nèi)存淘汰策略有以下6種

  • noeviction:當(dāng)內(nèi)存使用超過(guò)配置的時(shí)候會(huì)返回錯(cuò)誤,不會(huì)驅(qū)逐任何鍵
  • allkeys-lru:加入鍵的時(shí)候,如果過(guò)限,首先通過(guò)LRU算法驅(qū)逐最久沒(méi)有使用的鍵
  • volatile-lru:加入鍵的時(shí)候如果過(guò)限,首先從設(shè)置了過(guò)期時(shí)間的鍵集合中驅(qū)逐最久沒(méi)有使用的鍵
  • allkeys-random:加入鍵的時(shí)候如果過(guò)限,從所有key隨機(jī)刪除
  • volatile-random:加入鍵的時(shí)候如果過(guò)限,從過(guò)期鍵的集合中隨機(jī)驅(qū)逐
  • volatile-ttl:從配置了過(guò)期時(shí)間的鍵中驅(qū)逐馬上就要過(guò)期的鍵
  • 在redis 4.0以后,又增加了以下兩種
  • volatile-lfu:從所有配置了過(guò)期時(shí)間的鍵中驅(qū)逐使用頻率最少的鍵
  • allkeys-lfu:從所有鍵中驅(qū)逐使用頻率最少的鍵

內(nèi)存淘汰策略可以通過(guò)配置文件來(lái)修改,redis.conf對(duì)應(yīng)的配置項(xiàng)是maxmemory-policy 修改對(duì)應(yīng)的值就行,默認(rèn)是noeviction

LRU(the least recently used 最近最少使用)算法

如果一個(gè)數(shù)據(jù)在最近沒(méi)有被訪問(wèn)到,那么在未來(lái)被訪問(wèn)的可能性也很小,因此當(dāng)空間滿的時(shí)候,最久沒(méi)有被訪問(wèn)的數(shù)據(jù)最先被置換(淘汰)

LRU算法通常通過(guò)雙向鏈表來(lái)實(shí)現(xiàn),添加元素的時(shí)候,直接插入表頭,訪問(wèn)元素的時(shí)候,先判斷元素是否在鏈表中存在,如果存在就把該元素移動(dòng)至表頭,所以鏈表的元素排列順序就是元素最近被訪問(wèn)的順序,當(dāng)內(nèi)存達(dá)到設(shè)置閾值時(shí),LRU隊(duì)尾的元素由于被訪問(wèn)的時(shí)間線較遠(yuǎn),會(huì)優(yōu)先踢出

但是在redis中,并沒(méi)有嚴(yán)格實(shí)行LRU算法,之所以這樣是因?yàn)長(zhǎng)RU需要消耗大量的額外內(nèi)存,需要對(duì)現(xiàn)有的數(shù)據(jù)結(jié)構(gòu)進(jìn)行較大的改造,近似LRU算法采用在現(xiàn)有數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)上使用隨機(jī)采樣法來(lái)淘汰元素,能達(dá)到和LRU算法非常近似的效果。Redis的 LRU算法給每個(gè)key增加了一個(gè)額外的長(zhǎng)度為24bit的小字段,記錄最后一次被訪問(wèn)的時(shí)間戳。

redis通過(guò)maxmemory-samples 5配置,對(duì)key進(jìn)行采樣淘汰。同時(shí)在Redis3.0以后添加了淘汰池進(jìn)一步提升了淘汰準(zhǔn)確度。

但是LRU算法是存在一定的問(wèn)題

例如,這表示隨著時(shí)間的推移,四個(gè)不同的鍵訪問(wèn)。每個(gè)“〜”字符為一秒鐘,而“ |” 最后一行是當(dāng)前時(shí)刻。

~~ B ~~ B ~~ B ~~ B ~~ B ~~ B ~~ B ~~ B ~~ B ~~ B ~~ B ~~ B〜|

~~~~~~~~~~ C ~~~~~~~~ C ~~~~~~~~~ C ~~~~~~ |

~~~~~ D ~~~~~~~~~ D ~~~~~~~ D ~~~~~~~~ D |


在上圖中,按照LRU機(jī)制刪除的話刪除的順序應(yīng)該是C->A->B->D 其實(shí)這并不是我們想要的,因?yàn)锽被訪問(wèn)的頻率是最高的,而D被訪問(wèn)的頻率比較低,所以我們更想讓B保留,把D刪除,所以我們接下來(lái)看另一種策略 LFU

**LFU(leastFrequently used 最不經(jīng)常使用)**

如果一個(gè)數(shù)據(jù)在最近一段時(shí)間內(nèi)很少被訪問(wèn)到,那么可以認(rèn)為在將來(lái)他被訪問(wèn)到的概率也很小。所以,當(dāng)空間滿時(shí),最小頻率訪問(wèn)的數(shù)據(jù)最先被淘汰

Redis使用redisObject中的24bit lru字段來(lái)存儲(chǔ)lfu字段, 這24bit被分為兩部分:

1:高16位用來(lái)記錄訪問(wèn)時(shí)間(單位為分鐘) 

2:低8位用來(lái)記錄訪問(wèn)頻率,簡(jiǎn)稱counter

 16 bits  8 bits
 
 +----------------+--------+
 
 Last decr time | LOG_C |

但是counter 8bit很容易就溢出了,技巧是用一個(gè)邏輯計(jì)數(shù)器,給予概率的對(duì)數(shù)計(jì)數(shù)器,而不是一個(gè)普通的遞增計(jì)數(shù)器
```
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;
}
```

對(duì)應(yīng)的概率分布計(jì)算公式為
```
1.0/((counter - LFU_INIT_VAL)*server.lfu_log_factor+1);
```
其中LFU_INIT_VAL為5,其實(shí)簡(jiǎn)單說(shuō)就是,越大的數(shù),遞增的概率越低
嚴(yán)格按照LFU算法,時(shí)間越久的key,counter越有可能越大,被剔除的可能性就越小。counter只增長(zhǎng)不衰減就無(wú)法區(qū)分熱點(diǎn)key。為了解決這個(gè)問(wèn)題,redis提供了衰減因子server.lfu_decay_time,其單位為分鐘,計(jì)算方法也很簡(jiǎn)單,如果一個(gè)key長(zhǎng)時(shí)間沒(méi)有訪問(wèn)那么他的計(jì)數(shù)器counter就要減少,減少的值由衰減因子來(lái)控制

到此這篇關(guān)于Redis 對(duì)過(guò)期數(shù)據(jù)的處理方法的文章就介紹到這了,更多相關(guān)Redis過(guò)期數(shù)據(jù)的處理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Redis中的數(shù)據(jù)過(guò)期策略詳解
  • Redis數(shù)據(jù)導(dǎo)入導(dǎo)出以及數(shù)據(jù)遷移的4種方法詳解
  • lua讀取redis數(shù)據(jù)的null判斷示例代碼

標(biāo)簽:畢節(jié) 伊春 定州 泰州 甘南 拉薩 南寧 河源

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Redis 對(duì)過(guò)期數(shù)據(jù)的處理方法》,本文關(guān)鍵詞  Redis,對(duì),過(guò)期,數(shù)據(jù),的,處理,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Redis 對(duì)過(guò)期數(shù)據(jù)的處理方法》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于Redis 對(duì)過(guò)期數(shù)據(jù)的處理方法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    中文字幕乱码一区二区免费| 成人免费观看视频| 一本一道久久a久久精品| 精品日本一线二线三线不卡 | 免费欧美日韩国产三级电影| 91毛片在线观看| 亚洲欧洲无码一区二区三区| 国产一区二区三区日韩 | 日韩av一二三| 欧美日韩免费视频| 亚洲国产欧美一区二区三区丁香婷| 豆国产96在线|亚洲| 国产欧美精品一区aⅴ影院 | 欧美性色欧美a在线播放| 1区2区3区国产精品| 成人在线综合网站| 亚洲天堂免费看| 色综合久久66| 亚洲成a人v欧美综合天堂| 欧美美女喷水视频| 久久精品99国产精品日本| 欧美成人女星排行榜| 精品无人区卡一卡二卡三乱码免费卡| 26uuu亚洲综合色欧美| 丝袜诱惑亚洲看片| 欧美成人a在线| av不卡免费在线观看| 亚洲色图.com| 欧美一区二区三区在线视频| 蜜臀av性久久久久蜜臀aⅴ四虎| 精品久久人人做人人爽| 岛国精品在线观看| 亚洲成人动漫在线观看| 精品免费99久久| 成人高清免费观看| 亚洲国产日韩一区二区| 日韩欧美美女一区二区三区| 国产成人综合网站| 亚洲妇女屁股眼交7| 久久久久国产一区二区三区四区| 国产福利一区在线| 亚洲高清久久久| 久久精品男人的天堂| 欧美日韩黄视频| 成人黄色片在线观看| 丝瓜av网站精品一区二区| 国产欧美久久久精品影院| 欧美日韩视频一区二区| 国产成人在线视频免费播放| 亚洲午夜精品在线| 国产精品福利在线播放| 欧美人妖巨大在线| 色呦呦网站一区| 国产91丝袜在线播放九色| 青青草国产成人99久久| 亚洲综合一区二区三区| 国产日韩欧美一区二区三区综合| 欧美一区二区黄| 91精品婷婷国产综合久久| 91色porny在线视频| 国产精品99久久久久久久vr| 日韩中文字幕1| 亚洲综合色自拍一区| 亚洲伦理在线免费看| 国产精品高清亚洲| 国产精品久久久久久一区二区三区| 欧美一区二区三区小说| 91麻豆精品国产91久久久 | 国产精品午夜春色av| 久久精品人人做人人爽97| 亚洲精品在线一区二区| 日韩视频免费观看高清完整版| 在线91免费看| 91精品欧美综合在线观看最新| 欧美色老头old∨ideo| 欧美亚洲综合色| 欧美人xxxx| 日韩你懂的在线观看| 亚洲精品在线三区| 久久精品视频免费| 亚洲日本青草视频在线怡红院| 亚洲视频一区二区在线| 一片黄亚洲嫩模| 肉色丝袜一区二区| 精品一区二区三区视频| 国产一区二区不卡老阿姨| 国产电影一区二区三区| 91社区在线播放| 91精品婷婷国产综合久久性色| 日韩精品一区二区三区三区免费| 欧美xxxx老人做受| 成人欧美一区二区三区| 日本女人一区二区三区| 日本高清不卡视频| 欧美午夜电影在线播放| 日韩女同互慰一区二区| 日本一区二区三区久久久久久久久不| 亚洲日本欧美天堂| 另类小说图片综合网| 成人一区在线看| 欧美夫妻性生活| 国产精品乱子久久久久| 午夜电影一区二区| 成人免费视频app| 制服丝袜亚洲色图| 亚洲欧洲日韩一区二区三区| 亚洲一区二区av在线| 国产精品资源网站| 色婷婷久久综合| 久久综合成人精品亚洲另类欧美| 久久久久综合网| 亚洲一区二区三区激情| 成人免费毛片aaaaa**| 日韩一区二区三区视频在线观看| 国产精品久久影院| 极品少妇xxxx精品少妇| 欧美视频一区二区三区四区 | 欧美mv日韩mv国产| 日韩电影在线免费| 欧美偷拍一区二区| 亚洲摸摸操操av| 99久久久久久99| 国产精品亲子乱子伦xxxx裸| 偷拍亚洲欧洲综合| 欧美中文字幕一区二区三区亚洲| 欧美韩国日本不卡| 国产精品一二三四五| 337p粉嫩大胆噜噜噜噜噜91av | 91蜜桃传媒精品久久久一区二区 | 99re66热这里只有精品3直播 | 精品人伦一区二区色婷婷| 日本一道高清亚洲日美韩| 欧美精品黑人性xxxx| 亚洲午夜精品在线| 91.xcao| 久久国产精品99久久久久久老狼| 欧美日本一道本| 日韩激情一二三区| 日韩一区二区三| 国产高清不卡一区| 中文字幕一区二区三区色视频| 成人av影视在线观看| 亚洲欧洲制服丝袜| 3d动漫精品啪啪1区2区免费| 首页国产欧美久久| 欧美精品一区二区三区蜜桃| 国产精品1区二区.| 亚洲黄色性网站| 日韩欧美的一区二区| 国产精品99久久久久| 伊人婷婷欧美激情| 欧美成人r级一区二区三区| 国产91丝袜在线观看| 日本午夜一区二区| 国产婷婷色一区二区三区四区| 免费黄网站欧美| 欧美一卡在线观看| 激情综合亚洲精品| 26uuu另类欧美亚洲曰本| 91原创在线视频| 亚洲精品成人天堂一二三| 国产精品亚洲一区二区三区妖精| 26uuu国产电影一区二区| 91浏览器打开| 久久99久久久久| 亚洲欧美电影一区二区| 日韩一二在线观看| 色天天综合色天天久久| 亚洲国产成人av| 国产精品久久久久久户外露出 | 欧美tickling网站挠脚心| 97成人超碰视| 国产盗摄精品一区二区三区在线| 亚洲精选免费视频| 久久在线免费观看| 91精品久久久久久久久99蜜臂| 99精品一区二区三区| 免费精品视频最新在线| 亚洲色图欧洲色图婷婷| 久久久精品国产免大香伊| 欧美剧情电影在线观看完整版免费励志电影 | 国产精品一级二级三级| 青青草原综合久久大伊人精品| 一区二区三区四区视频精品免费 | 久久久久国产一区二区三区四区| 欧美精品日韩一区| 欧美高清www午色夜在线视频| 一本大道久久a久久精品综合| 97国产精品videossex| 91社区在线播放| 91黄色在线观看| 欧美亚洲日本国产| 欧美日韩一二三| 91麻豆精品国产91久久久久 | 亚洲第一成人在线| 男女性色大片免费观看一区二区 | 成人avav影音| 91国模大尺度私拍在线视频| 在线观看91精品国产入口| 91成人免费网站|