一、簡(jiǎn)介:
和大多NoSQL數(shù)據(jù)庫(kù)一樣,Redis同樣遵循了Key/Value數(shù)據(jù)存儲(chǔ)模型。在有些情況下,Redis會(huì)將Keys/Values保存在內(nèi)存中以提高數(shù)據(jù)查詢(xún)和數(shù)據(jù)修改的效率,然而這樣的做法并非總是很好的選擇。鑒于此,我們可以將之進(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ò)虛存將其余不常用的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ì)于使用虛存就再合適不過(guò)了。
在實(shí)際的應(yīng)用中,為了能讓虛存更為充分的發(fā)揮作用以幫助我們提高系統(tǒng)的運(yùn)行效率,我們可以將帶有很多較小值的Keys合并為帶有少量較大值的Keys。其中最主要的方法就是將原有的Key/Value模式改為基于Hash的模式,這樣可以讓很多原來(lái)的Keys成為Hash中的屬性。
三、配置:
1). 在配置文件中添加以下配置項(xiàng),以使當(dāng)前Redis服務(wù)器在啟動(dòng)時(shí)打開(kāi)虛存功能。
vm-enabled yes
2). 在配置文件中設(shè)定Redis最大可用的虛存字節(jié)數(shù)。如果內(nèi)存中的數(shù)據(jù)大于該值,則有部分對(duì)象被換出到磁盤(pán)中,其中被換出對(duì)象所占用內(nèi)存將被釋放,直到已用內(nèi)存小于該值時(shí)才停止換出。
新聞熱點(diǎn)
疑難解答
圖片精選