Als je de functionaliteit van virtueel geheugen hebt ingeschakeld (EDIT:nu verouderd ), dan begint Redis de "niet zo vaak gebruikte" gegevens op schijf op te slaan wanneer het geheugen opraakt.
Als virtueel geheugen in Redis is uitgeschakeld (standaard) en de maxmemory
parameter is ingesteld (de standaard), zal Redis niet meer geheugen gebruiken dan maxmemory
toestaat. Als je maxmemory
. draait uit, zal Redis virtueel geheugen gaan gebruiken (d.w.z. swap), en de prestaties zullen enorm dalen.
Nieuwere versies van Redis hebben verschillende beleidsregels wanneer maxmemory
is bereikt:
volatile-lru
- verwijder een sleutel onder degenen met een verlopen set, probeer sleutels te verwijderen die niet recentelijk zijn gebruikt.volatile-ttl
- verwijder een sleutel onder degenen met een verlopen set, probeer sleutels te verwijderen met een korte resterende tijd om te leven.volatile-random
- verwijder willekeurige sleutel onder degenen met een verlopen set.allkeys-lru
- likevolatile-lru
, maar zal alle soorten sleutels verwijderen, zowel normale sleutels als sleutels met een verlopen set.allkeys-random
-likevolatile-random
, maar zal alle soorten sleutels verwijderen, zowel normale sleutels als sleutels met een vervalset.
Als u een beleid kiest dat alleen sleutels verwijdert met een EXPIRE-set, lijkt het erop dat wanneer Redis onvoldoende geheugen heeft, het programma de malloc()-bewerking gewoon afbreekt. Dat wil zeggen, als u probeert meer gegevens op te slaan, mislukt de schrijfbewerking gewoon.
Enkele links voor meer info:
- http://antirez.com/post/redis-as-LRU-cache.html
- http://eli.thegreenplace.net/2009/10/30/handling-out-of-memory-conditions-in-c/