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优先移除

相关推荐
superman超哥1 小时前
04 深入 Oracle 并发世界:MVCC、锁、闩锁、事务隔离与并发性能优化的探索
数据库·oracle·性能优化·dba
用户8007165452001 小时前
HTAP数据库国产化改造技术可行性方案分析
数据库
minihuabei1 小时前
linux centos 安装redis
linux·redis·centos
engchina2 小时前
Neo4j 和 Python 初学者指南:如何使用可选关系匹配优化 Cypher 查询
数据库·python·neo4j
engchina2 小时前
使用 Cypher 查询语言在 Neo4j 中查找最短路径
数据库·neo4j
尘浮生2 小时前
Java项目实战II基于Spring Boot的光影视频平台(开发文档+数据库+源码)
java·开发语言·数据库·spring boot·后端·maven·intellij-idea
威哥爱编程2 小时前
SQL Server 数据太多如何优化
数据库·sql·sqlserver
小华同学ai2 小时前
AJ-Report:一款开源且非常强大的数据可视化大屏和报表工具
数据库·信息可视化·开源
Acrelhuang2 小时前
安科瑞5G基站直流叠光监控系统-安科瑞黄安南
大数据·数据库·数据仓库·物联网
十叶知秋3 小时前
【jmeter】jmeter的线程组功能的详细介绍
数据库·jmeter·性能测试