【后端面试总结】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

相关推荐
青云交3 分钟前
大数据新视界 -- 大数据大厂之 Hive 函数库:丰富函数助力数据处理(上)(11/ 30)
大数据·数据库·sql·数据处理·自定义函数·函数分类·常用函数·hive 函数库
kunkun_123020 分钟前
django app中的models迁移问题根治方法
数据库·django
胡歌128 分钟前
分布式主键生成方案
数据库
m0_7482451729 分钟前
oracle使用PLSQL导出表数据
数据库·oracle
若云止水42 分钟前
Ubuntu 下 nginx-1.24.0 源码分析 - ngx_init_cycle 函数 - 详解(11)
数据库·nginx·ubuntu
图图图图爱睡觉1 小时前
用大白话解释缓存Redis +MongoDB是什么有什么用怎么用
数据库·redis·mongodb
若云止水1 小时前
Ubuntu 下 nginx-1.24.0 源码分析 - ngx_init_cycle 函数 - 详解(2)
数据库·nginx·ubuntu
m0_672656541 小时前
sql专题 之 sql的执行顺序
java·数据库·sql
笨手笨脚の1 小时前
Redis 源码分析-内部数据结构 robj
数据结构·数据库·redis·raw·redisobject·44字节·embstr
合方圆~小文1 小时前
智科技赋能宠物关怀新时代
数据库·人工智能·计算机外设·安全性测试