Nosql
redis 使用所有分配的記憶體會發生什麼?
我對redis比較陌生,嘗試學習和探索redis的結構和架構。
在 2.4 版本之前,redis 中提供了虛擬記憶體選項,通過它可以將較少使用的值交換到磁碟,並在需要時從磁碟交換。只有熱點數據(經常使用)保存在主記憶體中。
但是現在由於沒有像虛擬記憶體這樣的選項,當分配給它的最大空間被完全填滿時,redis如何處理這種情況?
它如何使用哪種算法/程序從主記憶體中刪除數據?我們可以在不使用虛擬記憶體的情況下將很少使用的數據寫入磁碟嗎?
Redis 尊重
maxmemory
配置指令。當設置為 0(預設值)時,Redis 將嘗試根據需要分配盡可能多的記憶體。一旦完成,作業系統將殺死它。設置
maxmemory
為任何正值都會限制 Redis 用於數據的 RAM 量。當達到限制時,Redis 的行為將取決於maxmemory-policy
配置設置。以下內容取自預設redis.conf
文件,並詳細說明了不同的驅逐策略:volatile-lru -> 在設置過期的鍵中使用近似的 LRU 驅逐。
allkeys-lru -> 使用近似的 LRU 驅逐任何密鑰。
volatile-lfu -> 在具有過期集的鍵中使用近似 LFU 驅逐。
allkeys-lfu -> 使用近似 LFU 驅逐任何密鑰。
volatile-random -> 在設置過期的密鑰中刪除一個隨機密鑰。
allkeys-random -> 刪除隨機密鑰,任意密鑰。
volatile-ttl -> 刪除具有最近過期時間(次要 TTL)的
鍵 noeviction -> 不驅逐任何東西,只在寫操作時返回錯誤。