Redis 記憶體陷阱

來源:互聯網
上載者:User

標籤:

redis是個對記憶體依賴性很強的NoSql資料庫,在記憶體足夠的情況下效能出色

如果只有一台機子去部署redis,一定要特別小心。

比如我有台24G的伺服器,理所當然我會將大量記憶體配置給redis。

比如20G的記憶體, 問題來了, 當你對redis插入資料後,redis會非同步將資料dump到硬碟中

想起來很完美,問題是它會fork一個進程,並佔去同樣大小的記憶體,你需要的記憶體瞬間便為 20G+20G =40G

這時記憶體超過了實體記憶體的限制,馬上會啟動虛擬記憶體,我的機子上是8G虛擬記憶體,重點是這個是linux的虛擬記憶體,並不是redis自己的虛擬記憶體。

linux的虛擬記憶體 page很大,IO劇增,dump速度會非常慢,整個伺服器的效能降到冰點,服務要求都會堵塞。最嚴重到機子壞掉。

對於單台機子最好是降低redis虛擬記憶體設定,page可以根據配置修改,這個虛擬記憶體比linux的虛擬記憶體好很多,因為page小很多。

如果你的redis既有讀又有寫,那麼最好不要讓redis佔去大半的記憶體。

可以設定它的虛擬記憶體到8G,這還要根據你的key值大小的衡量,因為key是必須在記憶體中的,這樣一來就算啟用了虛擬記憶體,redis佔去的實際記憶體也會超出設想。

天哪, 就是說必須給redis留出他本身需要一倍以上的記憶體,平時在不插入資料的時候,記憶體空著不用,浪費。

此外官方文檔中建議對key小,value很大的資料設定虛擬記憶體。

另外master/slave不是很成熟,目前只支援主從,Redis在master是非阻塞模式,也就是說在slave執行資料同步的時候,master是可以接受用戶端的請求的,並不影響同步資料的一致性,然而在slave端是阻塞模式的,slave在同步master資料時,並不能夠響應用戶端的查詢

可以根據master/slave的特點,master不dump,它只負責寫資料,讓slave去dump


Redis 記憶體陷阱

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.