【75期】面试官:说说Redis的过期键删除策略吧!(高频)
阅读本文大概需要 5 分钟。
划重点:Redis的过期键删除策略也是面试中经常会被问的,我最近面试,被问到了好几次。
1. 常见的删除策略
定时删除
惰性删除
定期删除
1.1 定时删除策略
优点:对内存非常友好
缺点:对CPU时间非常不友好
1.2 惰性删除策略
优点:对CPU时间非常友好
缺点:对内存非常不友好
1.3 定期删除策略
2. Redis使用的过期键删除策略
2.1 惰性删除策略的实现
如果输入键已经过期,那么将输入键从数据库中删除
如果输入键未过期,那么不做任何处理
2.2 定期删除策略的实现
函数每次运行时,都从一定数量的数据库中随机取出一定数量的键进行检查,并删除其中的过期键,比如先从0号数据库开始检查,下次函数运行时,可能就是从1号数据库开始检查,直到15号数据库检查完毕,又重新从0号数据库开始检查,这样可以保证每个数据库都被检查到。
3. RDB对过期键的处理
3.1 生成RDB文件
3.2 载入RDB文件
如果服务器以主服务器模式运行,在载入RDB文件时,程序会对文件中保存的键进行检查,未过期的键会被载入到数据库中,过期键会被忽略。
如果服务器以从服务器模式运行,在载入RDB文件时,文件中保存的所有键,不论是否过期,都会被载入到数据库中。
4. AOF对过期键的处理
4.1 AOF文件写入
从数据库中删除message键
追加一条DEL message命令到AOF文件
-向执行GET message命令的客户端返回空回复
4.2 AOF文件重写
5. 复制功能对过期键的处理
主服务器在删除一个过期键后,会显式地向所有从服务器发送一个DEL命令,告知从服务器删除这个过期键。
从服务器在执行客户端发送的读命令时,即使发现该键已过期也不会删除该键,照常返回该键的值。
从服务器只有接收到主服务器发送的DEL命令后,才会删除过期键。
推荐阅读:
【73期】面试官:Spring 和 Spring Boot 的区别是什么?
【72期】面试官:对并发熟悉吗?说一下synchronized与Lock的区别与使用
微信扫描二维码,关注我的公众号
朕已阅
评论