当redis使用的内存超过最大内存限制maxmemory时,会使用以下内存淘汰策略之一。 volatile-lru: 对设置了过期时间的数据,淘汰最近最少使用的。 volatile-ttl: 对设置了过期时间的数据,淘汰即将过期的。 volatile-random:对设置了过期时间的数据,随机淘汰。 volatile-lfu: 对设置了过期时间的数据,淘汰最少使用的。(新加策略) allkeys-lru: 对所有数据,淘汰最近最少使用的。(常用) allkeys-random: 对所有数据,随机淘汰。 allkeys-lfu: 对所有数据,淘汰最少使用的。(新加策略) no-enviction: 不驱逐数据,即不淘汰任何数据,不够内存了就报错。(默认策略) 若使用volatile相关策略,当redis中没有设置了过期时间的数据时,会和no-enviction一样抛出错误,所以不推荐使用。 lru策略算法: 给每个key添加一个额外字段记录最近一次访问时间,随机获取maxmemory_samples(默认是5)个key,淘汰最旧的,直到内存小于maxmemory为止。 redis3.0后增加了淘汰池,淘汰池大小是maxmemory_samples,每次淘汰最旧的后,保留较旧的key,和新随机加入的key一起比较淘汰。
redis内存淘汰策略
最新推荐文章于 2024-08-31 08:00:00 发布