redis的key超时策略和key淘汰机制(面试题详解)

ChatGPT给出的回答:

Redis中的Key超时策略和Key淘汰机制是为了有效管理内存和控制数据的生命周期。

  1. Key超时策略:Redis可以为每个Key设置过期时间,一旦Key过期,它将自动从Redis中删除。可以使用EXPIRE命令为Key设置过期时间,例如可以使用EXPIRE key seconds命令设置某个Key在指定的秒数后过期。超时策略可以用于缓存失效、会话管理等场景,使得Redis可以自动清理不再使用的数据,释放内存空间。

  2. Key淘汰机制:当Redis的内存达到一定限制时,需要使用淘汰机制来决定哪些Key应该被删除以释放内存。Redis提供了不同的Key淘汰策略:

    • LRU(Least Recently Used):最近最少使用的Key被优先淘汰。
    • LFU(Least Frequently Used):最不经常使用的Key被优先淘汰。
    • Random(随机):随机选择Key进行淘汰。
    • TTL(Time to Live):优先淘汰设置了过期时间且已过期的Key。
      .

    淘汰机制可以通过配置参数来设置,例如可以使用maxmemory参数来限制Redis使用的最大内存,使用maxmemory-policy参数来指定淘汰策略。

    通过合理设置超时策略和淘汰机制,可以在Redis中有效管理内存,控制存储的数据,确保系统的性能和可用性。

详解

Redis过期策略
  • Redis在设置缓存数据时设置了过期时间,到了过期时间数据就失效了,但数据不会自动删除,那Redis是怎么处理这些失效的数据的呢?这个处理逻辑称之为过期策略。
  • Redis使用是惰性删除定期删除两种策略。

Redis的key过期策略
  • 被动方式 - 惰性删除
  • 主动方式 - 定期删除
  • 定时删除(十分消耗CPU资源,所以不用)

惰性删除

惰性删除不是去主动删除,而是在你要获取某个key 的时候,redis会先去检测一下这个key是否已经过期,如果没有过期则返回给你,如果已经过期了,则删除,返回null。

定期删除
  • Redis 默认每秒进行 10 次过期扫描,而是采用了一种简单的贪心策略:

  • 他会去遍历16个库,遍历每一个库,对这个库进行抽样,抽样之后,判断抽样出来的key,是否超过1/4的key是否处于过期状态,如果说,这些抽样出来的key里边的没有超过1/4的key过期,此时他先清理完抽样出来过期的数据之后,再去遍历下一个库

  • 如果说超过了1/4 的key过期了,再次去遍历这个库,再去取判断抽取出来是否超过1/4过期,如此循环。有一些默认的参数,规定说,遍历一个库的时间,最多不能超过多少,遍历所有库的时间最多不能超过多少。定期删除里面的参数都是算法决定的,参数可自己设置。

定时删除

在设置键的过期时间的同时,创建一个定时器,让定时器在键的过期时间来临时,立即执行对键的删除操作。


Redis淘汰机制

是指Redis的内存占用过多,达到maxmemory 之后,Redis就会采用一定的策略,淘汰掉一部分数据。

Redis6种淘汰机制

1、noeviction:当内存不足以容纳新写入数据时,新写入操作会报错(一般没人用,但是默认是使用这个策略)

2、allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的key(最常用)

3、allkeys-random:当内存不足以容纳新写入数据时,在键空间中,随机移除某个key (一般没人用)

4、volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的key(一般不太合适)

5、volatile-random:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个

6、key volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的key优先移除

相关推荐
是店小二呀17 分钟前
【金仓数据库征文】金融行业中的国产化数据库替代应用实践
数据库·金融·数据库平替用金仓·金仓数据库2025征文
炒空心菜菜34 分钟前
SparkSQL 连接 MySQL 并添加新数据:实战指南
大数据·开发语言·数据库·后端·mysql·spark
柯南二号43 分钟前
MacOS 用brew 安装、配置、启动Redis
redis
多多*1 小时前
算法竞赛相关 Java 二分模版
java·开发语言·数据结构·数据库·sql·算法·oracle
爱喝酸奶的桃酥1 小时前
MYSQL数据库集群高可用和数据监控平台
java·数据库·mysql
数据库幼崽1 小时前
MySQL 8.0 OCP 1Z0-908 61-70题
数据库·mysql·ocp
码农黛兮_462 小时前
SQL 索引优化指南:原理、知识点与实践案例
数据库·sql
爆肝疯学大模型2 小时前
SQL server数据库实现远程跨服务器定时同步传输数据
运维·服务器·数据库
星星点点洲3 小时前
【Redis】RedLock实现原理
redis·缓存