Redis 的缓存与淘汰机制

Redis 的缓存与淘汰机制

Redis 内存淘汰指的是用户存储的一些键被可以被 Redis 主动地从实例中删除 淘汰机制和 Redis 最大占用内存 maxmemory 值以及过期时间 expireTime 紧密相连,典型的例子是: a.客户端发起了需要申请更多内存的命令(如set)。 b.Redis 检查内存使用情况,如果已使用的内存大于 maxmemory 则开始根据用户配置的不同淘汰策略来淘汰已存储的数据(key),从而换取一定的内存。 c.如果上面都没问题,则这个命令执行成功。 注:maxmemory 为 0 的时候表示我们对 Redis 的内存使用没有限制,redis 默认设置 maxmemory 为 0。 Redis 支持很多种淘汰机制: a.volatile-lru:从已设置过期时间的数据集(server.db\[i\].expires)中挑选最近最少使用的数据淘汰; b.volatile-ttl:从已设置过期时间的数据集(server.db\[i\].expires)中挑选将要过期的数据淘汰; c.volatile-random:从已设置过期时间的数据集(server.db\[i\].expires)中任意选择数据淘汰;d.allkeys-lru:从数据集(server.db\[i\].dict)中挑选最近最少使用的数据淘汰; e.allkeys-random:从数据集(server.db\[i\].dict)中任意选择数据淘汰; f.noeviction:禁止驱逐数据,当内存使用达到阈值的时候,所有引起申请内存的命令会报错。 可以看出数据删除与否和数据是否进行过持久化没有绝对联系,只是不同版本上默认的淘汰机制有所差异,目前版本一般为 noeviction,即不允许删除数据。