溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

redis虛擬內(nèi)存怎么配置

發(fā)布時(shí)間:2021-12-22 17:32:09 來(lái)源:億速云 閱讀:173 作者:iii 欄目:云計(jì)算

本篇內(nèi)容介紹了“redis虛擬內(nèi)存怎么配置”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

首先說(shuō)明下redis的虛擬內(nèi)存與os的虛擬內(nèi)存不是一碼事,但是思路和目的都是相同的。就是暫時(shí)把不經(jīng)常訪問(wèn)的數(shù)據(jù)從內(nèi)存交換到磁盤中,從而騰出寶貴的 內(nèi)存空間用于其他需要訪問(wèn)的數(shù)據(jù)。尤其是對(duì)于redis這樣的內(nèi)存數(shù)據(jù)庫(kù),內(nèi)存總是不夠用的。除了可以將數(shù)據(jù)分割到多個(gè)redis server外。另外的能夠提高數(shù)據(jù)庫(kù)容量的辦法就是使用vm把那些不經(jīng)常訪問(wèn)的數(shù)據(jù)交換的磁盤上。如果我們的存儲(chǔ)的數(shù)據(jù)總是有少部分?jǐn)?shù)據(jù)被經(jīng)常訪問(wèn),大 部分?jǐn)?shù)據(jù)很少被訪問(wèn),對(duì)于網(wǎng)站來(lái)說(shuō)確實(shí)總是只有少量用戶經(jīng)?;钴S。當(dāng)少量數(shù)據(jù)被經(jīng)常訪問(wèn)時(shí),使用vm不但能提高單臺(tái)redis server數(shù)據(jù)庫(kù)的容量,而且也不會(huì)對(duì)性能造成太多影響。

redis沒(méi)有使用os提供的虛擬內(nèi)存機(jī)制而是自己在用戶態(tài)實(shí)現(xiàn)了自己的虛擬內(nèi)存機(jī)制。
主要的理由有兩點(diǎn)

1.os 的虛擬內(nèi)存是已4k頁(yè)面為最小單位進(jìn)行交換的。而redis的大多數(shù)對(duì)象都遠(yuǎn)小于4k,所以一個(gè)os頁(yè)面上可能有多個(gè)redis對(duì)象。另外redis的集 合對(duì)象類型如list,set可能存在與多個(gè)os頁(yè)面上。最終可能造成只有10%key被經(jīng)常訪問(wèn),但是所有os頁(yè)面都會(huì)被os認(rèn)為是活躍的,這樣只有內(nèi) 存真正耗盡時(shí)os才會(huì)交換頁(yè)面。

2.相比于os的交換方式。redis可以將被交換到磁盤的對(duì)象進(jìn)行壓縮,保存到磁盤的對(duì)象可以去除指針和對(duì)象元數(shù)據(jù)信息。一般壓縮后的對(duì)象會(huì)比內(nèi)存中的對(duì)象小10倍。這樣redis的vm會(huì)比os vm能少做很多io操作。

下面是vm相關(guān)配置
vm-enabled yes #開(kāi)啟vm功能
vm-swap-file /tmp/redis.swap #交換出來(lái)的value保存的文件路徑/tmp/redis.swap
vm-max-memory 1000000 #redis使用的最大內(nèi)存上限,超過(guò)上限后redis開(kāi)始交換value到磁盤文件中。
vm-page-size 32 #每個(gè)頁(yè)面的大小32個(gè)字節(jié)
vm-pages 134217728 #最多使用在文件中使用多少頁(yè)面,交換文件的大小 = vm-page-size * vm-pages
vm-max-threads 4 #用于執(zhí)行value對(duì)象換入換出的工作線程數(shù)量。0表示不使用工作線程(后面介紹)

redis的vm在設(shè)計(jì)上為了保證key的查找速度,只會(huì)將value交換到swap文件中。所以如果是內(nèi)存問(wèn)題是由于太多value很小的key造成 的,那么vm并不能解決。和os一樣redis也是按頁(yè)面來(lái)交換對(duì)象的。redis規(guī)定同一個(gè)頁(yè)面只能保存一個(gè)對(duì)象。但是一個(gè)對(duì)象可以保存在多個(gè)頁(yè)面中。 在redis使用的內(nèi)存沒(méi)超過(guò)vm-max-memory之前是不會(huì)交換任何value的。當(dāng)超過(guò)最大內(nèi)存限制后,redis會(huì)選擇較老的對(duì)象。如果兩個(gè) 對(duì)象一樣老會(huì)優(yōu)先交換比較大的對(duì)象,精確的公式swappability = age*log(size_in_memory)。 對(duì)于vm-page-size的設(shè)置應(yīng)該根據(jù)自己的應(yīng)用將頁(yè)面的大小設(shè)置為可以容納大多數(shù)對(duì)象的大小。太大了會(huì)浪費(fèi)磁盤空間,太小了會(huì)造成交換文件出現(xiàn)碎 片。對(duì)于交換文件中的每個(gè)頁(yè)面,redis會(huì)在內(nèi)存中對(duì)應(yīng)一個(gè)1bit值來(lái)記錄頁(yè)面的空閑狀態(tài)。所以像上面配置中頁(yè)面數(shù)量(vm-pages 134217728 )會(huì)占用16M內(nèi)存用來(lái)記錄頁(yè)面空閑狀態(tài)。vm-max-threads表示用做交換任務(wù)的線程數(shù)量。如果大于0推薦設(shè)為服務(wù)器的cpu core的數(shù)量。如果是0則交換過(guò)程在主線程進(jìn)行。

“redis虛擬內(nèi)存怎么配置”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI