Redis VM在Redis 2.4中已被棄用,並且在Redis 2.6中已被刪除。這是一個死衚衕:不要使用它。
我想你是困擾與操作系統分頁阻塞虛擬機。他們是兩個不同的東西。
當Redis虛擬機根本沒有配置(無論阻塞模式如何)時,OS分頁是Redis的默認模式。如果操作系統不適合物理內存,操作系統將交換Redis內存。事件循環可以隨時凍結。當它發生時,性能很糟糕,因爲Redis的內部數據結構都沒有爲此設計(沒有本地化,沒有分頁系統)。
Redis VM可以配置爲非阻塞模式(使用I/O線程)。當I/O完成時,事件循環未被阻止,並且Redis仍然響應。但是,當I/O堆積太多時,I/O線程將完全忙碌,最終得到響應式Redis,但無法處理任何需要I/O的查詢。
Redis VM也可以在阻塞模式下配置。在此模式下,所有I/O在主事件循環線程中同步執行。所以事件循環在I/O的情況下被凍結(例如在鍵未命中的情況下)。所有客戶都受到影響。但是,一般性能(CPU消耗和延遲)優於非阻塞模式,因爲一些線程調度/同步已保存。
實際上,OS分頁和Redis阻塞虛擬機的區別在於粒度級別。使用Redis VM時,粒度是關鍵。使用操作系統分頁,以及頁面(一個4 KB的塊可以跨越幾個不相關的鍵)。
在所有3種情況下,轉儲文件的初始負載將非常緩慢,並會在系統上產生隨機I/O峯值。正如你所指出的,大多數對象都會被加載然後換出。預熱時間會很長。
除非數據中存在極端的局部性,或者您根本不關心延遲,否則使用1 GB RAM作爲16 GB數據集的Redis虛擬機是科幻IMO。
Redis VM被淘汰的原因是有原因的。按照設計,它永遠不會像基於磁盤的數據存儲(它可以利用文件映射或直接I/O來避免雙緩衝,並使用適當的數據結構(如B樹))那樣執行。
Redis作爲內存存儲非常出色。但是如果你需要存儲比RAM更大的東西,不要使用它。其他(基於磁盤的)商店的表現會更好。