持续总结中!2024年面试必问 20 道 Redis面试题(四)

上一篇地址:持续总结中!2024年面试必问 20 道 Redis面试题(三)-CSDN博客

七、Redis过期键的删除策略?

Redis 过期键的删除策略主要涉及以下几种方式:

1. 定时删除(Timed Expiration)

这是最直接的过期键删除策略。当为一个键设置过期时间后,Redis 会在该键达到过期时间时立即将其删除。这种方式的优点是确保了数据的实时性,过期数据能够立即被清理出去,但缺点是可能会对性能产生影响,因为每个带有过期时间的键都需要创建一个定时器来监控。

2. 惰性删除(Lazy Expiration)

在这种策略下,键并不会在过期时立即被删除,而是在下一次访问该键时才会被检查并删除。这种方式的优点是可以节省CPU资源,因为它避免了定时器的开销。但是,它可能会导致过期数据在内存中驻留较长时间,从而占用内存空间。

3. 定期扫描删除(Periodic Expiration)

Redis 会定期扫描键空间以查找并删除过期的键。这种策略通过随机抽样的方式来减少对性能的影响,但无法保证过期数据能够及时被删除。定期扫描可以配置不同的频率和条件,以适应不同的性能和实时性需求。

4. 内存淘汰策略(Eviction Policies)

当内存不足时,Redis 会根据配置的内存淘汰策略来决定哪些键应该被删除。这些策略包括但不限于:

  • noeviction:不删除任何数据,如果内存不足,写入操作将被拒绝。
  • allkeys-lru:从所有键中删除最近最少使用的键。
  • allkeys-random:从所有键中随机删除键。
  • volatile-lru:从设置了过期时间的键中删除最近最少使用的键。
  • volatile-random:从设置了过期时间的键中随机删除键。
  • volatile-ttl:删除即将过期的键。

5. 内存碎片整理(Active Defragmentation)

在 Redis 4.0 及以上版本中,可以启用内存碎片整理功能。这个功能可以在后台异步地整理内存,减少内存碎片,从而提高内存的使用效率。虽然这个功能不直接删除过期键,但它有助于提高内存的总体性能。

6. 使用 Redis 4.0 及以上版本的优化特性

Redis 4.0 引入了一些新特性,比如 LAZY FREE,可以在后台线程中异步地释放过期键占用的内存,减少对主线程的影响。

7. 过期时间分散策略

为了避免大量键在同一时间过期导致的性能问题,可以通过在设置的过期时间上增加一个随机偏移量,使得过期时间分散在一段时间内,从而避免删除操作的集中。

通过这些策略的组合使用,Redis 能够在保证性能的同时,有效地管理过期键的删除,确保缓存数据的时效性和内存使用的效率。

八、Redis的回收策略(淘汰策略)?

Redis 提供了多种数据淘汰策略,用于在内存不足时从键空间中选择并移除数据。以下是 Redis 支持的主要淘汰策略:

1. noeviction

此策略会阻止任何新写入操作,如果内存限制达到,尝试写入数据时会返回错误。这种策略不会淘汰任何现有的键。

2. allkeys-lru

这种策略会淘汰整个键空间中最久未被访问的键(Least Recently Used)。它适用于那些访问模式下旧数据很少被再次访问的场景。

3. allkeys-random

此策略会从所有键中随机选择并淘汰一个键。它是一种简单且公平的淘汰方式,但可能不是最优化的。

4. volatile-lru

这种策略会淘汰那些设置了过期时间的键中最久未被访问的键。如果键空间中没有可淘汰的过期键,Redis 将尝试使用 noeviction 策略。

5. volatile-random

此策略会从设置了过期时间的键中随机淘汰一个键。与 volatile-lru 类似,如果没有过期键,Redis 将使用 noeviction 策略。

6. volatile-ttl

这种策略会淘汰那些设置了过期时间的键中,剩余生存时间(Time To Live, TTL)最短的键。如果没有过期键,Redis 同样会使用 noeviction 策略。

7. allkeys-lfu

这种策略会淘汰整个键空间中最少使用的键(Least Frequently Used)。适用于那些访问模式下某些数据很少被访问的场景。

8. volatile-lfu

此策略会淘汰设置了过期时间的键中最少使用的键。如果没有过期键,Redis 将使用 noeviction 策略。

配置淘汰策略

淘汰策略可以在 Redis 配置文件中设置,通过 maxmemory-policy 配置项进行配置。例如:

maxmemory-policy allkeys-lru

这行配置表示当 Redis 达到内存上限时,将使用 LRU 策略淘汰数据。

考虑因素

在选择淘汰策略时,需要考虑以下因素:

  • 数据访问模式:不同的应用有不同的数据访问模式,选择一个与访问模式相匹配的淘汰策略非常重要。
  • 数据时效性:对于那些过期后不再需要的数据,使用考虑 TTL 的淘汰策略可能更合适。
  • 内存限制:了解系统的内存限制,并根据可用内存选择合适的淘汰策略。
  • 业务需求:不同的业务对数据的准确性和实时性有不同的需求,需要根据业务需求选择淘汰策略。

总结

Redis 的淘汰策略提供了灵活的选择,以适应不同的应用场景和业务需求。正确配置和使用这些策略,可以帮助确保 Redis 在内存限制下依然能够高效稳定地运行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/13683.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

面试的内容

1.C的三大特性:封装,继承,多态 2.C11的特性 3.NULL与Nullptr的区别: nullptr是一个特殊的空指针常量,不能被隐式转换为其他类型。 NULL 在一些情况下可能会发生隐式类型转换 4.智能指针 5.stl/Qt stl stl容器包含哪些&…

如何在没有密码或Face ID的情况下解锁iPhone

iPhone 是一款以其一流的安全功能而闻名的设备,包括面容 ID 和密码。但是,你有没有想过,如果没有这些安全措施,你是否可以解锁iPhone?无论您是忘记了密码,Face ID不起作用,还是只是对其他方法感…

5.23-

回顾 I0多路复用的原理? 程序首先向操作系统发起一个IO多路复用请求,告诉操作系统需要监视哪些IO通道。这些IO通道可以包括网络套接字、文件描述符等操作系统随后会将这些IO通道放入一个队列中,并在某个IO通道就绪时(如数据到达、文件可读…

「YashanDB迁移体验官」Mysql生产环境迁移至YashanDB数据库深度体验

「YashanDB迁移体验官」Mysql生产环境迁移至YashanDB数据库深度体验 1. 前言1.1 产品介绍1.2 产品架构1.3 产品规格1.3.1 数据库版本支持1.3.2 数据类型支持 2. YMP安装2.1 环境说明2.2 执行安装2.3 访问YMP2.3.1 YMP登录界面2.3.2 YMP迁移流程 3. YMP数据迁移3.1 创建数据源3.…

离线模式下载安装gcc-4.8.5

目录 一,下载gcc离线安装包 二,下载gcc依赖包 三,安装gcc 1, 解压 2, 将依赖库放置环境 3, 安装 3.1自动安装 3.1.1 执行依赖库的编译 3.1.2 新建编译目录 3.1.3 配置编译环境 3.1.4 编译 3.1.5 安装 3.2 手动安装 3.2.1 安装GMP-4.3.2 3.2.2 安装mpf…

【pytorch】 Win11下cuda,cudnn以及pytorch环境安装

Win11下cuda,cudnn以及pytorch环境安装 CUDA环境安装1. 查看CUDA版本1.1 打开NVIDIA控制面板,可以点右下角的NVIDIA设置1.2 点击系统信息,选择组件查看CUDA版本 2. 下载对应的CUDA版本3. 安装3.1 启动exe文件安装 4. 验证安装结果 CUDNN 环境…

【MySQL精通之路】InnoDB-启动选项和系统变量

系统变量可以在服务器启动时设置TRUE或FALSE启用禁用,也可以通过使用--skip前缀来禁用 例如: 要启用或禁用InnoDB自适应哈希索引,可以在命令行中使用--skip-innodb-adaptive-hash-index或--innodb-adaptive-hash-index,或者在配置…

JavaSE : 注解 Annotation

注解 Java中的注解(Annotation)是一种元数据形式,用于向编译器或JVM提供有关程序元素(如类、方法、变量、参数和包)的附加信息。注解不会直接影响程序的行为或结构,但它们可以被编译器、开发工具或运行时环…

Apache CXF Aegis databinding SSRF 高危漏洞修复

一、漏洞修复 Apache CXF Aegis databinding SSRF漏洞 Spring Web UriComponentsBuilder URL解析不当漏洞 二、修复步骤 1、Apache CXF Aegis databinding SSRF漏洞修复 步骤: 进入服务器搜索 databinding find -name *databinding* 发现版本是3.1.6 果断…

数据结构~~带环链表的环开始的节点位置**两种方法

1.带环链表环开始的位置 (1)上面的这个测试用例使用的是包含了4个节点的带环链表,我们要找的就是链表里面的环开始的节点的位置,拿这个测试用例而言,就是2这个节点,从这个节点开始,我们的链表就…

【第16章】MyBatis-Spring之SqlSession

文章目录 前言一、SqlSessionTemplate1. 创建2. 使用3. 批量操作3.1 创建SqlSessionTemplate3.2 service3.3 controller 二、SqlSessionDaoSupport总结 前言 在 MyBatis 中,你可以使用 SqlSessionFactory 来创建 SqlSession。 一旦你获得一个 session 之后&#xf…

源码部署EFK

目录 资源列表 基础环境 关闭防护墙 关闭内核安全机制 修改主机名 添加hosts映射 一、部署elasticsearch 修改limit限制 部署elasticsearch 修改配置文件 单节点 集群(3台节点集群为例) 启动 二、部署filebeat 部署filebeat 添加配置文件 启动 三、部署kiban…

单点登录【demo】

前言 2023-07-29 15:44:56 公开发布于 2024-5-22 00:04:56 单点登录【demo】 以下是 Java 实现单点登录的示例代码: 单点登录(Single Sign-On,SSO)是一种身份认证和授权机制,可以使用户在多个应用程序或系统之间使…

SQL常用基础语句(一)-- FGHIJ开头

GROUP BY GROUP BY语法可以根据给定数据列的每个成员对查询结果进行分组统计,最终得到一个分组汇总表。在GROUP BY子句后面包含了一个HAVING子句,HAVING类似于WHERE,(唯一的差别是WHERE过滤行,HAVING过滤组&#xff0…

【C/C++笔试练习】TCP、IP广播、ARP协议、IP路由器、MAC协议、三次握手、TCP/IP、子网划分年、会抽奖、抄送列表

文章目录 C/C笔试练习选择部分(1)TCP(2)IP广播(3)ARP协议(4)IP路由器(5)MAC协议(6)三次握手(7)TCP/IP&#xf…

PHP在线制作表白网源码

PHP在线制作表白网源码,送女友个惊喜吧,无数据库,上传就能用,后台/admin,账号密码都是admin 百度网盘:https://pan.baidu.com/s/1rbD2_8IsP9UPLK-cdgEXfA?pwdre59

AWS安全性身份和合规性之Secrets Manager

AWS Secrets Manager是一项AWS托管的服务,用于安全地存储、管理和轮转敏感信息,如数据库密码、API密钥、OAuth令牌等。AWS Secrets Manager助您在整个生命周期内轻松管理、检索和轮换数据库凭证、API密钥和其他密钥。 关键词:集中管理、加密…

sql使用加和进行合并去重并提升速率

背景 有三张表ltd1 、ltd0051和、ltd0011ltd1作为主表,左关联 ltd0051和ltd0011如果ltd0051有两条重复数据、td0011有两条重复数据,左关联之后就会得到4条,同时ltd0051和ltd0011这两条数据都是正确,基于主键我们需要将两个相同主键…

【全开源】AJAX家政上门服务系统小程序自营+多商家(高级授权)+独立端

基于FastAdmin和原生微信小程序开发的一款同城预约、上门服务、到店核销家政系统,用户端、服务端(高级授权)、门店端(高级授权)各端相互依赖又相互独立,支持选择项目、选择服务人员、选择门店多种下单方式,支持上门服务和到店核销两种服务方式…

深入理解数仓开发(一)数据技术篇之日志采集

前言 今天开始重新回顾电商数仓项目,结合《阿里巴巴大数据之路》和尚硅谷的《剑指大数据——企业级电商数据仓库项目实战 精华版》来进行第二次深入理解学习。之前第一次学习数仓,虽然尽量放慢速度力求深入理解,但是不可能一遍掌握&#xff0…