【后端面试总结】Redis过期删除策略

Redis会将每个设置了过期时间的key放入一个独立的字典中,以后会定时遍历这个字典来删除到期的key。除了定时遍历之外,它还会使用惰性策略来删除过期的key。所谓惰性策略就是在客户端访问这个key的时候,Redis对key的过期时间进行检查,如果过期了就立即删除。如果说定时删除是集中处理,那么惰性删除就是零散处理。

定期删除

Redis默认每秒进行10次过期扫描,过期扫描不会遍历过期字典中所有的key,而是采用了一种简单的贪心策略,步骤如下:

  1. 从过期字典中随机选出20个key
  2. 删除这20个key中已经过期的key
  3. 如果过期的key的比例超过1/4,那就重复步骤1

同时,为了保证过期扫描不会出现循环过度,导致线程卡死的现象,算法还增加了扫描时间的上限,默认不会超过25ms。

惰性删除

在获取key时,先判断key是否过期,如果过期则删除。这种方式存在一个缺点:如果这个key一直未被使用,那么它一直在内存中,其实它已经过期了,会浪费大量的空间。

这两种策略结合起来以后,定时删除策略发生了一些改变,不再是每次扫描全部的key了,而是随机抽取一部分key进行检查,这样就降低了对CPU资源的损耗,惰性删除策略互补了为检查到的key

相关推荐
清幽竹客13 分钟前
redis数据结构-02(INCR、DECR、APPEND)
数据结构·redis
Toky Zhu33 分钟前
ubuntu清除缓存
linux·ubuntu·缓存
呦呦鹿鸣Rzh1 小时前
redis
数据库·redis·缓存
xiaogai_gai1 小时前
有效的聚水潭数据集成到MySQL案例
android·数据库·mysql
只因只因爆1 小时前
spark的缓存
大数据·缓存·spark
web130933203982 小时前
Mysql的安装配置教程(非常详细)从零基础入门到精通,看完这一篇就够了
数据库·mysql
三天不学习2 小时前
浅析AI大模型为何需要向量数据库?【入门基础】
数据库·人工智能·欧氏距离·向量数据库·余弦相似度
MonkeyKing_sunyuhua2 小时前
将数据库结构化数据整合到RAG问答中的方式
数据库
喝醉酒的小白2 小时前
MySQL内存使用率高问题排查与解决方案:
数据库
鹅鹅鹅呢2 小时前
mysql 登录报错:ERROR 1045(28000):Access denied for user ‘root‘@‘localhost‘ (using password Yes)
android·数据库·mysql