自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

詳解Redis5.0數(shù)據(jù)淘汰策略

存儲(chǔ) 存儲(chǔ)軟件 Redis
作為一個(gè)內(nèi)存數(shù)據(jù)庫(kù),redis在內(nèi)存空間不足的時(shí)候,為了保證命中率,就會(huì)選擇一定的數(shù)據(jù)淘汰策略,這篇文章主要講解常見(jiàn)的幾種內(nèi)存淘汰策略。和我們操作系統(tǒng)中的頁(yè)面置換算法類似。

 作為一個(gè)內(nèi)存數(shù)據(jù)庫(kù),redis在內(nèi)存空間不足的時(shí)候,為了保證命中率,就會(huì)選擇一定的數(shù)據(jù)淘汰策略,這篇文章主要講解常見(jiàn)的幾種內(nèi)存淘汰策略。和我們操作系統(tǒng)中的頁(yè)面置換算法類似。

[[313000]]

一、參數(shù)設(shè)置

我們的redis數(shù)據(jù)庫(kù)的最大緩存、主鍵失效、淘汰機(jī)制等參數(shù)都是通過(guò)配置文件來(lái)配置的。這個(gè)文件是我們的redis.config文件,我們的redis裝在了/usr/local/redis目錄下,所以配置文件也在這里。首先說(shuō)明一下我使用的redis是5。也是目前最新的版本。

1、最大內(nèi)存參數(shù)

關(guān)鍵的配置就在最下面,我們可以設(shè)置多少個(gè)字節(jié)。默認(rèn)是關(guān)閉的。

2、內(nèi)存淘汰策略

不同于之前的版本,redis5.0為我們提供了八個(gè)不同的內(nèi)存置換策略。很早之前提供了6種。

 

(1)volatile-lru:從已設(shè)置過(guò)期時(shí)間的數(shù)據(jù)集中挑選最近最少使用的數(shù)據(jù)淘汰。

(2)volatile-ttl:從已設(shè)置過(guò)期時(shí)間的數(shù)據(jù)集中挑選將要過(guò)期的數(shù)據(jù)淘汰。

(3)volatile-random:從已設(shè)置過(guò)期時(shí)間的數(shù)據(jù)集中任意選擇數(shù)據(jù)淘汰。

(4)volatile-lfu:從已設(shè)置過(guò)期時(shí)間的數(shù)據(jù)集挑選使用頻率最低的數(shù)據(jù)淘汰。

(5)allkeys-lru:從數(shù)據(jù)集中挑選最近最少使用的數(shù)據(jù)淘汰

(6)allkeys-lfu:從數(shù)據(jù)集中挑選使用頻率最低的數(shù)據(jù)淘汰。

(7)allkeys-random:從數(shù)據(jù)集(server.db[i].dict)中任意選擇數(shù)據(jù)淘汰

(8) no-enviction(驅(qū)逐):禁止驅(qū)逐數(shù)據(jù),這也是默認(rèn)策略。意思是當(dāng)內(nèi)存不足以容納新入數(shù)據(jù)時(shí),新寫(xiě)入操作就會(huì)報(bào)錯(cuò),請(qǐng)求可以繼續(xù)進(jìn)行,線上任務(wù)也不能持續(xù)進(jìn)行,采用no-enviction策略可以保證數(shù)據(jù)不被丟失。

這八種大體上可以分為4中,lru、lfu、random、ttl。

二、淘汰機(jī)制的實(shí)現(xiàn)

1、刪除失效主鍵

既然是淘汰,那就需要把這些數(shù)據(jù)給刪除,然后保存新的。Redis 刪除失效主鍵的方法主要有兩種:

(1)消極方法(passive way),在主鍵被訪問(wèn)時(shí)如果發(fā)現(xiàn)它已經(jīng)失效,那么就刪除它。redis在實(shí)現(xiàn)GET、MGET、HGET、LRANGE等所有涉及到讀取數(shù)據(jù)的命令時(shí)都會(huì)調(diào)用 expireIfNeeded,它存在的意義就是在讀取數(shù)據(jù)之前先檢查一下它有沒(méi)有失效,如果失效了就刪除它。

expireIfNeeded函數(shù)中調(diào)用的另外一個(gè)函數(shù)propagateExpire,這個(gè)函數(shù)用來(lái)在正式刪除失效主鍵,并且廣播告訴其他地方,目的地有倆:AOF文件,將刪除失效主鍵的這一操作以DEL Key的標(biāo)準(zhǔn)命令格式記錄下來(lái);另一個(gè)就是發(fā)送到當(dāng)前Redis服務(wù)器的所有Slave,同樣將刪除失效主鍵的這一操作以DEL Key的標(biāo)準(zhǔn)命令格式告知這些Slave刪除各自的失效主鍵。

(2)積極方法(active way),周期性地探測(cè),發(fā)現(xiàn)失效就刪除。消極方法的缺點(diǎn)是,如果key 遲遲不被訪問(wèn),就會(huì)占用很多內(nèi)存空間,所以才有積極方式。

(3)主動(dòng)刪除:當(dāng)內(nèi)存超過(guò)maxmemory限定時(shí),觸發(fā)主動(dòng)清理策略,該策略由啟動(dòng)參數(shù)的配置決定

主鍵具體的失效時(shí)間全部都維護(hù)在expires這個(gè)字典表中:

2、淘汰數(shù)據(jù)的量

既然是淘汰數(shù)據(jù),那么淘汰多少合適呢?

為了避免頻繁的觸發(fā)淘汰策略,每次會(huì)淘汰掉一批數(shù)據(jù),淘汰的數(shù)據(jù)的大小其實(shí)是和置換的大小來(lái)確定的,如果置換的數(shù)據(jù)量大,淘汰的肯定也多。

3、置換策略是如何工作

理解置換策略的執(zhí)行方式是非常重要的,比如:

(1)客戶端執(zhí)行一條新命令,導(dǎo)致數(shù)據(jù)庫(kù)需要增加數(shù)據(jù)(比如set key value)

(2)Redis會(huì)檢查內(nèi)存使用,如果內(nèi)存使用超過(guò)maxmemory,就會(huì)按照置換策略刪除一些key

(3)新的命令執(zhí)行成功

OK,redis數(shù)據(jù)淘汰策略就先到這,版本使用的是最新的5??赡軙?huì)和3不同。

 

責(zé)任編輯:武曉燕 來(lái)源: 今日頭條
相關(guān)推薦

2024-10-08 10:13:17

2024-09-26 06:30:36

2020-07-17 21:15:08

Redis內(nèi)存數(shù)據(jù)庫(kù)

2023-10-26 07:13:14

Redis內(nèi)存淘汰

2024-11-11 17:12:22

2022-07-01 14:20:49

Redis策略函數(shù)

2024-08-19 09:13:02

2024-06-04 07:38:10

2024-04-18 00:20:56

Redis策略數(shù)據(jù)

2019-04-10 10:43:15

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

2021-09-10 18:47:22

Redis淘汰策略

2023-10-16 23:57:35

Redis內(nèi)存

2019-11-12 14:15:07

Redis內(nèi)存持久化

2021-03-13 14:04:43

Redis內(nèi)存策略

2021-05-08 21:26:04

Redismemcachedset

2022-02-28 08:42:49

RedisStream消息隊(duì)列

2020-08-25 17:50:36

Redis數(shù)據(jù)庫(kù)內(nèi)存

2011-08-03 09:28:23

2010-08-19 15:54:42

MyEclipse 5 WebLogic 9

2021-03-10 10:40:04

Redis命令Linux
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)