14、定期和惰性一定能保证删除数据吗?如果不能,Redis会有什么应对 措施?
2021/8/16 19:36:17
本文主要是介绍14、定期和惰性一定能保证删除数据吗?如果不能,Redis会有什么应对 措施?,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
并不能保证一定删除,Redsi有一个Redis 内存淘汰机制来确保数据一定会被删除。
首先介一下定期删除和惰性删除的工作流程:
1、定期删除,Redis默认每个100ms检查,是否有过期的key,有过期key则删除。需要说明的是,Redis不 是每个100ms将所有的key检查一次,而是随机抽取进行检查(如果每隔100ms,全部key进行检查,Redis岂 不是卡死)。因此,如果只采用定期删除策略,会导致很多key到时间没有删除。
2、于是,惰性删除派上用场。也就是说在你获取某个key的时候,Redis会检查一下,这个key如果设置 了过期时间那么是否过期了?如果过期了此时就会删除。
3、采用定期删除+惰性删除就没其他问题了么? 不是的,如果定期删除没删除key。然后你也没即时去请求key,也就是说惰性删除也没生效。这样, Redis 内存会越来越高。那么就应该采用内存淘汰机制。
在Redis.conf中有一行配置:maxmemory-policy volatile-lru
该配置就是配内存淘汰策略的,主要有以下六种方案:
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(驱逐):禁止驱逐数据,新写入操作会报错
ps:如果没有设置 expire 的key, 不满足先决条件(prerequisites); 那么 volatile-lru, volatile-random 和 volatile-ttl 策略的行为, 和 noeviction(不删除) 基本上一致。
这篇关于14、定期和惰性一定能保证删除数据吗?如果不能,Redis会有什么应对 措施?的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-07Redis高并发入门详解
- 2024-12-07Redis缓存入门:新手必读指南
- 2024-12-07Redis缓存入门:新手必读教程
- 2024-12-07Redis入门:新手必备的简单教程
- 2024-12-07Redis入门:新手必读的简单教程
- 2024-12-06Redis入门教程:从安装到基本操作
- 2024-12-06Redis缓存入门教程:轻松掌握缓存技巧
- 2024-12-04Redis入门:简单教程详解
- 2024-11-29Redis开发入门教程:从零开始学习Redis
- 2024-11-27Redis入门指南:快速掌握Redis基础操作