您好,登錄后才能下訂單哦!
本篇內容介紹了“redis虛擬內存怎么配置”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
首先說明下redis的虛擬內存與os的虛擬內存不是一碼事,但是思路和目的都是相同的。就是暫時把不經常訪問的數據從內存交換到磁盤中,從而騰出寶貴的 內存空間用于其他需要訪問的數據。尤其是對于redis這樣的內存數據庫,內存總是不夠用的。除了可以將數據分割到多個redis server外。另外的能夠提高數據庫容量的辦法就是使用vm把那些不經常訪問的數據交換的磁盤上。如果我們的存儲的數據總是有少部分數據被經常訪問,大 部分數據很少被訪問,對于網站來說確實總是只有少量用戶經常活躍。當少量數據被經常訪問時,使用vm不但能提高單臺redis server數據庫的容量,而且也不會對性能造成太多影響。
redis沒有使用os提供的虛擬內存機制而是自己在用戶態實現了自己的虛擬內存機制。
主要的理由有兩點
1.os 的虛擬內存是已4k頁面為最小單位進行交換的。而redis的大多數對象都遠小于4k,所以一個os頁面上可能有多個redis對象。另外redis的集 合對象類型如list,set可能存在與多個os頁面上。最終可能造成只有10%key被經常訪問,但是所有os頁面都會被os認為是活躍的,這樣只有內 存真正耗盡時os才會交換頁面。
2.相比于os的交換方式。redis可以將被交換到磁盤的對象進行壓縮,保存到磁盤的對象可以去除指針和對象元數據信息。一般壓縮后的對象會比內存中的對象小10倍。這樣redis的vm會比os vm能少做很多io操作。
下面是vm相關配置
vm-enabled yes #開啟vm功能
vm-swap-file /tmp/redis.swap #交換出來的value保存的文件路徑/tmp/redis.swap
vm-max-memory 1000000 #redis使用的最大內存上限,超過上限后redis開始交換value到磁盤文件中。
vm-page-size 32 #每個頁面的大小32個字節
vm-pages 134217728 #最多使用在文件中使用多少頁面,交換文件的大小 = vm-page-size * vm-pages
vm-max-threads 4 #用于執行value對象換入換出的工作線程數量。0表示不使用工作線程(后面介紹)
redis的vm在設計上為了保證key的查找速度,只會將value交換到swap文件中。所以如果是內存問題是由于太多value很小的key造成 的,那么vm并不能解決。和os一樣redis也是按頁面來交換對象的。redis規定同一個頁面只能保存一個對象。但是一個對象可以保存在多個頁面中。 在redis使用的內存沒超過vm-max-memory之前是不會交換任何value的。當超過最大內存限制后,redis會選擇較老的對象。如果兩個 對象一樣老會優先交換比較大的對象,精確的公式swappability = age*log(size_in_memory)。 對于vm-page-size的設置應該根據自己的應用將頁面的大小設置為可以容納大多數對象的大小。太大了會浪費磁盤空間,太小了會造成交換文件出現碎 片。對于交換文件中的每個頁面,redis會在內存中對應一個1bit值來記錄頁面的空閑狀態。所以像上面配置中頁面數量(vm-pages 134217728 )會占用16M內存用來記錄頁面空閑狀態。vm-max-threads表示用做交換任務的線程數量。如果大于0推薦設為服務器的cpu core的數量。如果是0則交換過程在主線程進行。
“redis虛擬內存怎么配置”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。