当redis使用的内存数大于可使用的内存数时,进行内存淘汰。

相对于Memcached来说(只有LRU淘汰算法),redis的淘汰算法比较丰富,主要有3种:

1.随机淘汰算法:从数据库中随机删除一个key

2.LRU淘汰算法:从数据库中删除一个最近最少访问的key

3.TTL淘汰算法:从数据库中删除一个最快过期的key

通过maxmemory-policy配置项指定使用的淘汰算法,至于使用哪种淘汰算法,应根据自己的需求设定。

redis 确定驱逐某个键值对后,会删除这个数据并,并将这个数据变更消息发布到本地(AOF 持久化)和从机(主从连接)。

具体到实践:

volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰
volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰
volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰
allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰
allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰
no-enviction(驱逐):禁止驱逐数据