一、知识点
-
惰性删除:
指某个键值过期后,此键值不会马上被删除,而是等到下次被使用的时候,才会被检查到过期,此时才能得到删除,惰性删除的缺点很明显是浪费内存。 -
定时删除:
每隔一段时间执行一次删除操作,并通过限制删除操作执行的时长和频率,来减少删除操作对cpu的影响。另一方面定时删除也有效的减少了因惰性删除带来的内存浪费。 -
立即删除:
立即删除能保证内存中数据的最大新鲜度,因为它保证过期键值会在过期后马上被删除,其所占用的内存也会随之释放。但是立即删除对cpu是最不友好的。因为删除操作会占用cpu的时间,如果刚好碰上了cpu很忙的时候,比如正在做交集或排序等计算的时候,就会给cpu造成额外的压力。
二、考点剖析
// Redis的过期策略是什么?
惰性删除 + 定期删除
// Redis怎么实现定期删除的呢?
Redis默认每隔100ms随机抽取一些设置了过期时间的key,检查是否过期,如果过期就删除。
// 为什么要随机抽取呢?
假设Redis中有大量的key,并且都设置了过期时间,如果全量检查的话,将会耗费大量的CPU时间,这样有损Redis对外的服务性能。
// 随机抽取会带来什么问题呢?
可能导致已经过期的key还滞留在内存中,占用着内存空间。
// 如何解决随机抽取带来的问题呢?
为了解决这个问题,Redis引入了惰性删除。
// 什么是惰性删除呢?
在获取某个key的时候,Redis会进行检查,如果key设置了过期时间,并且已经过期,则删除这个key,释放内存空间。
// 如果某些key没有触发惰性删除,也就是说经过惰性删除 + 定期删除两轮清理,依旧存在,该如何解决呢?
这种情况,在内存不足的时候,Redis的内存淘汰策略就派上用场了。










网友评论