婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Redis教程(十一):虛擬內存介紹

Redis教程(十一):虛擬內存介紹

熱門標簽:高德地圖標注商家在哪 400電話從哪里申請濱州 hbuilder地圖標注 400電話申請怎么看 機器人電話機創意繪畫 隨州營銷電話機器人怎么樣 杭州400電話如何申請的 天音通信電話機器人 江西南昌百應電話機器人

一、簡介:

    和大多NoSQL數據庫一樣,Redis同樣遵循了Key/Value數據存儲模型。在有些情況下,Redis會將Keys/Values保存在內存中以提高數據查詢和數據修改的效率,然而這樣的做法并非總是很好的選擇。鑒于此,我們可以將之進一步優化,即盡量在內存中只保留Keys的數據,這樣可以保證數據檢索的效率,而Values數據在很少使用的時候則可以被換出到磁盤。
    在實際的應用中,大約只有10%的Keys屬于相對比較常用的鍵,這樣Redis就可以通過虛存將其余不常用的Keys和Values換出到磁盤上,而一旦這些被換出的Keys或Values需要被讀取時,Redis則將其再次讀回到主內存中。

二、應用場景:

    對于大多數數據庫而言,最為理想的運行方式就是將所有的數據都加載到內存中,而之后的查詢操作則可以完全基于內存數據完成。然而在現實中這樣的場景卻并不普遍,更多的情況則是只有部分數據可以被加載到內存中。
    在Redis中,有一個非常重要的概念,即keys一般不會被交換,所以如果你的數據庫中有大量的keys,其中每個key僅僅關聯很小的value,那么這種場景就不是非常適合使用虛擬內存。如果恰恰相反,數據庫中只是包含少量的keys,而每一個key所關聯的value卻非常大,那么這種場景對于使用虛存就再合適不過了。
    在實際的應用中,為了能讓虛存更為充分的發揮作用以幫助我們提高系統的運行效率,我們可以將帶有很多較小值的Keys合并為帶有少量較大值的Keys。其中最主要的方法就是將原有的Key/Value模式改為基于Hash的模式,這樣可以讓很多原來的Keys成為Hash中的屬性。

三、配置:

  1). 在配置文件中添加以下配置項,以使當前Redis服務器在啟動時打開虛存功能。
    vm-enabled yes
   
    2). 在配置文件中設定Redis最大可用的虛存字節數。如果內存中的數據大于該值,則有部分對象被換出到磁盤中,其中被換出對象所占用內存將被釋放,直到已用內存小于該值時才停止換出。
 

復制代碼 代碼如下:

    vm-max-memory (bytes)
 

    Redis的交換規則是盡量考慮"最老"的數據,即最長時間沒有使用的數據將被換出。如果兩個對象的age相同,那么Value較大的數據將先被換出。需要注意的是,Redis不會將Keys交換到磁盤,因此如果僅僅keys的數據就已經填滿了整個虛存,那么這種數據模型將不適合使用虛存機制,或者是將該值設置的更大,以容納整個Keys的數據。在實際的應用,如果考慮使用Redis虛擬內存,我們應盡可能的分配更多的內存交給Redis使用,以避免頻繁的換入換出。
   
    3). 在配置文件中設定頁的數量及每一頁所占用的字節數。為了將內存中的數據傳送到磁盤上,我們需要使用交換文件。這些文件與數據持久性無關,Redis會在退出前會將它們全部刪除。由于對交換文件的訪問方式大多為隨機訪問,因此建議將交換文件存儲在固態磁盤上,這樣可以大大提高系統的運行效率。
 
復制代碼 代碼如下:

    vm-pages 134217728
    vm-page-size 32   
 

    在上面的配置中,Redis將交換文件劃分為vm-pages個頁,其中每個頁所占用的字節為vm-page-size,那么Redis最終可用的交換文件大小為:vm-pages * vm-page-size。由于一個value可以存放在一個或多個頁上,但是一個頁不能持有多個value,鑒于此,我們在設置vm-page-size時需要充分考慮Redis的該特征。
 
    4). 在Redis的配置文件中有一個非常重要的配置參數,即:
 
復制代碼 代碼如下:

    vm-max-threads 4
 

    該參數表示Redis在對交換文件執行IO操作時所應用的最大線程數量。通常而言,我們推薦該值等于主機的CPU cores。如果將該值設置為0,那么Redis在與交換文件進行IO交互時,將以同步的方式執行此操作。
    對于Redis而言,如果操作交換文件是以同步的方式進行,那么當某一客戶端正在訪問交換文件中的數據時,其它客戶端如果再試圖訪問交換文件中的數據,該客戶端的請求就將被掛起,直到之前的操作結束為止。特別是在相對較慢或較忙的磁盤上讀取較大的數據值時,這種阻塞所帶來的影響就更為突兀了。然而同步操作也并非一無是處,事實上,從全局執行效率視角來看,同步方式要好于異步方式,畢竟同步方式節省了線程切換、線程間同步,以及線程拉起等操作產生的額外開銷。特別是當大部分頻繁使用的數據都可以直接從主內存中讀取時,同步方式的表現將更為優異。
    如果你的現實應用恰恰相反,即有大量的換入換出操作,同時你的系統又有很多的cores,有鑒于此,你又不希望客戶端在訪問交換文件之前不得不阻塞一小段時間,如果確實是這樣,我想異步方式可能更適合于你的系統。
    至于最終選用哪種配置方式,最好的答案將來自于不斷的實驗和調優。

您可能感興趣的文章:
  • Redis swap空間(虛擬內存)的使用詳解
  • 一次關于Redis內存詭異增長的排查過程實戰記錄
  • 淺談redis內存數據的持久化方式
  • redis 限制內存使用大小的實現
  • redis內存空間效率問題的深入探究

標簽:石嘴山 葫蘆島 保定 常德 招商 鶴崗 昆明 沈陽

巨人網絡通訊聲明:本文標題《Redis教程(十一):虛擬內存介紹》,本文關鍵詞  Redis,教程,十一,虛擬,內存,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Redis教程(十一):虛擬內存介紹》相關的同類信息!
  • 本頁收集關于Redis教程(十一):虛擬內存介紹的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 仁化县| 万源市| 桂林市| 嵩明县| 图片| 青河县| 余姚市| 奇台县| 玉田县| 伊宁市| 富阳市| 陆河县| 阳谷县| 石棉县| 化德县| 定南县| 左贡县| 温泉县| 宿松县| 忻州市| 德安县| 黑龙江省| 根河市| 道孚县| 新泰市| 时尚| 建始县| 依兰县| 旺苍县| 徐州市| 钟祥市| 合肥市| 桂林市| 黄山市| 监利县| 泽库县| 汉中市| 从江县| 海宁市| 密云县| 东城区|