偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

你管這破玩意兒叫Redis虛擬內(nèi)存?

數(shù)據(jù)庫(kù) Redis
對(duì)于Redis而言,如果操作交換文件是以同步的方式進(jìn)行,那么當(dāng)某一客戶(hù)端正在訪(fǎng)問(wèn)交換文件中的數(shù)據(jù)時(shí),其它客戶(hù)端如果再試圖訪(fǎng)問(wèn)交換文件中的數(shù)據(jù),該客戶(hù)端的請(qǐng)求就將被掛起,直到之前的操作結(jié)束為止。

Redis作為分布式緩存的標(biāo)配,在開(kāi)發(fā)分布式和微服務(wù)系統(tǒng)時(shí)被廣泛應(yīng)用。但是,很少有小伙伴會(huì)去了解有關(guān)Redis的虛擬內(nèi)存。這不,一哥們出去面試就被問(wèn)到這個(gè)問(wèn)題。今天,我們就一起來(lái)聊聊Redis的虛擬內(nèi)存。

關(guān)于Redis

與大多數(shù)的NoSQL數(shù)據(jù)庫(kù)一樣,Redis同樣遵循了Key/Value數(shù)據(jù)存儲(chǔ)模型。但是在有些情況下,Redis會(huì)將Keys/Values保存在內(nèi)存中以提高數(shù)據(jù)查詢(xún)和數(shù)據(jù)修改的效率,但是,這種方式也不是最優(yōu)的。

我們可以進(jìn)一步優(yōu)化,盡量在內(nèi)存中只保留Keys的數(shù)據(jù),這樣可以保證數(shù)據(jù)檢索的效率,而Values數(shù)據(jù)在很少使用的時(shí)候則可以被持久化到磁盤(pán)。

在實(shí)際的應(yīng)用中,大約只有10%的Keys屬于相對(duì)比較常用的鍵,這樣Redis就可以通過(guò)虛擬內(nèi)存將其余不常用的Keys和Values持久化到磁盤(pán)上,而一旦這些被持久化的Keys或Values需要被讀取時(shí),Redis則將其再次讀回到主內(nèi)存中。

應(yīng)用場(chǎng)景

對(duì)于大多數(shù)數(shù)據(jù)庫(kù)而言,最為理想的運(yùn)行方式就是將所有的數(shù)據(jù)都加載到內(nèi)存中,而之后的查詢(xún)操作則可以完全基于內(nèi)存數(shù)據(jù)完成。但是,在現(xiàn)實(shí)中這樣的場(chǎng)景并不多,更多的情況則是只有部分?jǐn)?shù)據(jù)可以被加載到內(nèi)存中。

在Redis中,有一個(gè)非常重要的概念,即keys一般不會(huì)被交換,所以如果你的數(shù)據(jù)庫(kù)中有大量的keys,其中每個(gè)key僅僅關(guān)聯(lián)很小的value,那么這種場(chǎng)景就不是非常適合使用虛擬內(nèi)存。

如果恰恰相反,數(shù)據(jù)庫(kù)中只是包含少量的keys,而每一個(gè)key所關(guān)聯(lián)的value卻非常大,那么這種場(chǎng)景對(duì)于使用虛擬內(nèi)存就非常合適了。

在實(shí)際的應(yīng)用中,為了能讓虛擬內(nèi)存更為充分的發(fā)揮作用以幫助我們提高系統(tǒng)的運(yùn)行效率,我們可以將帶有很多較小值的Keys合并為帶有少量較大值的Keys。

其中最主要的方法就是將原有的Key/Value模式改為基于Hash的模式,這樣可以讓很多原來(lái)的Keys成為Hash中的屬性。

配置Redis虛擬內(nèi)存

(1)在配置文件中添加以下配置項(xiàng),以使當(dāng)前Redis服務(wù)器在啟動(dòng)時(shí)打開(kāi)虛擬內(nèi)存功能。

vm-enabled yes

(2)在配置文件中設(shè)定Redis最大可用的虛擬內(nèi)存字節(jié)數(shù)。如果內(nèi)存中的數(shù)據(jù)大于該值,則有部分對(duì)象被持久化到磁盤(pán)中,其中被持久化對(duì)象所占用的內(nèi)存將被釋放,直到已用內(nèi)存小于該值時(shí)才停止持久化。

vm-max-memory (bytes)

Redis的交換規(guī)則是盡量考慮"最老"的數(shù)據(jù),即最長(zhǎng)時(shí)間沒(méi)有使用的數(shù)據(jù)將被持久化。如果兩個(gè)對(duì)象的age相同,那么Value較大的數(shù)據(jù)將先被持久化。

需要注意的是,Redis不會(huì)將Keys持久化到磁盤(pán),因此如果僅僅keys的數(shù)據(jù)就已經(jīng)填滿(mǎn)了整個(gè)虛擬內(nèi)存,那么這種數(shù)據(jù)模型將不適合使用虛擬內(nèi)存機(jī)制,或者是將該值設(shè)置的更大,以容納整個(gè)Keys的數(shù)據(jù)。

在實(shí)際的應(yīng)用,如果考慮使用Redis虛擬內(nèi)存,我們應(yīng)盡可能的分配更多的內(nèi)存交給Redis使用,以避免頻繁的將數(shù)據(jù)持久化到磁盤(pán)上。

(3)在配置文件中設(shè)定頁(yè)的數(shù)量及每一頁(yè)所占用的字節(jié)數(shù)。為了將內(nèi)存中的數(shù)據(jù)傳送到磁盤(pán)上,我們需要使用交換文件。這些文件與數(shù)據(jù)持久性無(wú)關(guān),Redis會(huì)在退出前會(huì)將它們?nèi)縿h除。

由于對(duì)交換文件的訪(fǎng)問(wèn)方式大多為隨機(jī)訪(fǎng)問(wèn),因此建議將交換文件存儲(chǔ)在固態(tài)磁盤(pán)上,這樣可以大大提高系統(tǒng)的運(yùn)行效率。

vm-pages 134217728
vm-page-size 32

在上面的配置中,Redis將需要持久化的文件劃分為vm-pages個(gè)頁(yè),其中每個(gè)頁(yè)所占用的字節(jié)為vm-page-size,那么Redis最終可用的交換文件大小為:vm-pages *  vm-page-size。

由于一個(gè)value可以存放在一個(gè)或多個(gè)頁(yè)上,但是一個(gè)頁(yè)不能持有多個(gè)value,鑒于此,我們?cè)谠O(shè)置vm-page-size時(shí)需要充分考慮Redis的該特征。

(4)在Redis的配置文件中有一個(gè)非常重要的配置參數(shù),即:

vm-max-threads 4

該參數(shù)表示Redis在對(duì)交換文件執(zhí)行IO操作時(shí)所應(yīng)用的最大線(xiàn)程數(shù)量。通常而言,我們推薦該值等于主機(jī)的CPU cores。

如果將該值設(shè)置為0,那么Redis在與交換文件進(jìn)行IO交互時(shí),將以同步的方式執(zhí)行此操作。

Redis同步數(shù)據(jù)方式

對(duì)于Redis而言,如果操作交換文件是以同步的方式進(jìn)行,那么當(dāng)某一客戶(hù)端正在訪(fǎng)問(wèn)交換文件中的數(shù)據(jù)時(shí),其它客戶(hù)端如果再試圖訪(fǎng)問(wèn)交換文件中的數(shù)據(jù),該客戶(hù)端的請(qǐng)求就將被掛起,直到之前的操作結(jié)束為止。特別是在相對(duì)較慢或較忙的磁盤(pán)上讀取較大的數(shù)據(jù)值時(shí),這種阻塞所帶來(lái)的影響就更為突兀了。

然而同步操作也并非一無(wú)是處,事實(shí)上,從全局執(zhí)行效率視角來(lái)看,同步方式要好于異步方式,畢竟同步方式節(jié)省了線(xiàn)程切換、線(xiàn)程間同步,以及線(xiàn)程拉起等操作產(chǎn)生的額外開(kāi)銷(xiāo)。特別是當(dāng)大部分頻繁使用的數(shù)據(jù)都可以直接從主內(nèi)存中讀取時(shí),同步方式的表現(xiàn)將更為優(yōu)異。

至于最終選用哪種配置方式,最好的方式是不斷的實(shí)驗(yàn)和調(diào)優(yōu)。


責(zé)任編輯:武曉燕 來(lái)源: 冰河技術(shù)
相關(guān)推薦

2021-05-17 18:27:20

Token驗(yàn)證HTTP

2022-05-10 09:16:50

MQ內(nèi)存消費(fèi)者

2022-02-07 09:40:10

高可用高并發(fā)高性能

2021-07-14 18:21:50

負(fù)載均衡TCP網(wǎng)關(guān)

2024-05-29 08:56:31

2022-03-14 17:56:15

云廠商系統(tǒng)阿里云

2021-03-11 12:27:36

java 變量數(shù)量

2021-04-26 08:16:18

CPU 語(yǔ)言編寫(xiě)

2021-03-04 13:14:54

文件系統(tǒng)存儲(chǔ)

2021-02-04 11:01:59

計(jì)算機(jī)信號(hào)轉(zhuǎn)換

2023-05-15 10:03:00

Redis緩存穿透

2021-01-14 09:04:24

線(xiàn)程池工具類(lèi)面試

2020-12-01 08:19:15

Redis

2018-05-04 15:57:42

AI智慧谷歌

2022-07-08 15:13:21

DockerLinux命令

2022-10-09 09:38:10

高可用設(shè)計(jì)

2010-06-28 15:58:45

EclipseJavaIDE

2010-06-29 13:39:26

Eclipse什么玩意兒

2010-07-02 10:10:09

Eclipse

2010-07-05 15:56:01

EclipseRCPECF
點(diǎn)贊
收藏

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