Redis面试题二(数据存储)

目录

1.redis 的数据过期策略

1. 惰性删除(Lazy Expiration)

2. 定期删除(Periodic Expiration)

3. 定时删除(Timing-Based Expiration)

实际应用中的组合策略

2.redis 有哪些内存淘汰机制

volatile(设置过期时间的数据集)

allkeys(所有数据集)

no-enviction(驱逐)

3.持久化文件对过期策略的处理?

4.redis 有哪些持久化机制

5.说说 redis 的 RDB

6.说说 redis 的 AOF

7.RDB 和 AOF 该如何选择

8.什么是 redis 的 Pipeline

Pipeline 的工作原理与优势:

Pipeline 的主要优点:

9.原生批命令 (mset, mget) 与 Pipeline 区别?


1.redis 的数据过期策略

1. 惰性删除(Lazy Expiration)

  • 原理:当客户端尝试访问一个键时,Redis 会检查该键是否已过期。如果发现键已过期,Redis 会在返回键值之前立即将其删除,然后返回空值(nil)给客户端,表明该键已不存在或已过期。

  • 特点:惰性删除是一种被动的过期处理方式,仅在访问时才触发删除操作。它对 CPU 资源消耗最小,但如果大量键过期后长时间未被访问,可能会导致无用数据在内存中积累,占用不必要的存储空间。

2. 定期删除(Periodic Expiration)

  • 原理:Redis 会周期性地运行一个名为“过期键删除器”(Expired Keys Collector)的后台进程,它通过一定的算法(如随机采样)从数据库中挑选一部分可能过期的键进行检查,并删除其中已过期的键。这个过程不是严格定时的,而是根据一定的条件和频率进行。

  • 特点:定期删除提供了主动清理过期键的能力,有助于控制内存占用。通过调整删除任务的执行频率和每次扫描的键数量,可以在内存管理与 CPU 利用之间取得平衡。不过,定期删除无法保证过期键会立即被删除,也不能保证在任何时刻所有过期键都已被删除。

3. 定时删除(Timing-Based Expiration)

注:此处存在一些混淆。实际上,Redis 并不直接使用“定时删除”策略,即在设置键的过期时间时就创建一个定时器来精确地在过期时刻删除键。这种做法虽然可以立即释放内存,但会带来较高的 CPU 开销,且在高并发场景下可能引发问题。因此,Redis 通常不采用这种方式。

实际应用中的组合策略

在实际的 Redis 实现中,主要采用的是 惰性删除 与 定期删除 的组合策略。这两种策略互补工作,确保既能及时清理过期数据、控制内存占用,又不至于过度消耗 CPU 资源。

  • 惰性删除 处理那些“恰好”在访问时发现已过期的键,对客户端请求透明,资源消耗小。
  • 定期删除 负责周期性地主动查找并删除过期键,防止大量过期键因长期未被访问而堆积在内存中。

这样的设计使得 Redis 能够在大多数情况下有效地管理过期数据,既保证了服务的响应速度,又合理利用了系统资源。同时,Redis 提供了配置选项,允许管理员根据实际需求调整定期删除任务的执行策略,以适应不同场景下的内存和性能要求。

2.redis 有哪些内存淘汰机制

Redis 作为一个内存数据库,在内存空间不足的时候,为了保证命中率,就会和我们操作系统中的页面置换算法类似,选择一定的数据淘汰策略。

volatile(设置过期时间的数据集)

1)volatile-lru:从已设置过期时间的数据集中挑选最近最少使用的数据淘汰。

2)volatile-ttl:从已设置过期时间的数据集中挑选将要过期的数据淘汰。

3)volatile-random:从已设置过期时间的数据集中任意选择数据淘汰。

4)volatile-lfu:从已设置过期时间的数据集挑选使用频率最低的数据淘汰。

allkeys(所有数据集)

5)allkeys-lru:从数据集中挑选最近最少使用的数据淘汰

6)allkeys-lfu:从数据集中挑选使用频率最低的数据淘汰。

7)allkeys-random:从数据集中任意选择数据淘汰

no-enviction(驱逐)

8)no-enviction(驱逐):禁止驱逐数据,这也是默认策略。

3.持久化文件对过期策略的处理?

过期 key 是不会写入 RDB 和 AOF 文件,同时数据恢复时也会做过期验证。

4.redis 有哪些持久化机制

RDB 和 AOF

5.说说 redis 的 RDB

  • 全量快照:RDB 是一种将 Redis 数据库在某一时刻的状态保存为一个紧凑的二进制文件(通常命名为 dump.rdb)的机制。Redis 通过配置规则(如指定的时间间隔、数据变更次数等)触发快照创建过程。在创建快照时,Redis 通常采用 fork 子进程的方式,子进程负责将内存中的数据以序列化格式写入 RDB 文件,而主进程继续处理客户端请求。由于采用了 copy-on-write 机制,这一过程通常对 Redis 的性能影响较小。

  • RDB 支持 同步(save 命令)、后台异步(bgsave)以及自动配置三种方式触发。

  • 优点
    • 文件紧凑,便于备份和快速恢复。
    • 恢复时加载速度快,适合大规模数据的恢复场景。
    • 对于灾难恢复而言,RDB 文件易于传输和存储。
  • 缺点
    • 如果 Redis 宕机且没有及时创建快照,可能会丢失一定时间段内的数据。
    • 创建快照时对 CPU 和内存有一定消耗,特别是在数据量大且变化频繁的情况下。

6.说说 redis 的 AOF

  • 追加式日志:AOF 模式下,Redis 会将所有修改数据库状态的写命令(如 sethsetdel 等)以文本形式追加到一个单独的日志文件中。随着写操作的进行,AOF 文件会不断增长。为了保持文件大小可控和提高恢复效率,Redis 提供了 AOF 重写功能,可以将当前数据库状态以最小数量的操作命令重新写入一个新的 AOF 文件。
  • 同步策略:AOF 提供了多种数据同步至磁盘的策略,如 always(每次写命令都同步)、everysec(默认,每秒同步一次)和 no(由操作系统自行决定何时同步)。
  • 优点
    • 数据安全性高,因为AOF 记录了所有写操作,即使在意外停机后,也能通过回放日志文件几乎精确地恢复数据。
    • 可以通过调整同步策略来在数据安全性与写性能之间做出权衡。
    • 支持 AOF 重写,可以缩小文件体积并去除冗余操作。
  • 缺点
    • AOF 文件通常比 RDB 文件大,恢复速度相对较慢。
    • 在极端情况下(如长时间未同步或文件损坏),可能需要手动修复。

7.RDB 和 AOF 该如何选择

  • Redis 4.0 及以上版本新增:在 Redis 4.0 中引入了混合持久化机制,允许同时开启 RDB 和 AOF。在这种模式下,Redis 重启时首先加载 RDB 快照以快速恢复大部分数据,然后重放 AOF 文件中自 RDB 快照之后的增量写操作。这种组合方式兼顾了 RDB 的快速恢复能力和 AOF 的高数据安全性。
  • 优点
    • 结合了 RDB 和 AOF 的优点,既能够快速恢复大部分数据,又能通过回放 AOF 日志补充恢复期间发生的写操作,降低数据丢失风险。
  • 缺点
    • 需要同时管理 RDB 和 AOF 文件,增加了运维复杂性。
    • 存在一定的资源开销,如额外的磁盘空间和启动时的处理时间。
命令RDBAOF
体积
恢复速度
数据安全性丢数据取决于刷盘策略
轻重

8.什么是 redis 的 Pipeline

Redis Pipeline(管道)是一种客户端批处理技术,它允许客户端在一个网络往返(Round Trip Time, RTT)中发送一组命令到 Redis 服务器,然后一次性接收所有命令的响应。Pipeline 主要目的是减少网络通信的延迟开销,提高 Redis 客户端与服务器之间的交互效率,尤其是在执行大量连续命令时。

Pipeline 的工作原理与优势

  • 批量发送:使用 Pipeline 时,客户端不再等待每个命令的响应,而是将多个命令(可以是任意数量)打包成一个“命令包”,一次性发送给 Redis 服务器。这样,原本需要多次网络往返才能完成的命令序列,现在只需一次网络通信即可发送完毕。

  • 批量响应:服务器接收到包含多条命令的“命令包”后,会按照接收到的顺序依次执行这些命令,并将所有命令的执行结果保存在内部缓冲区。

  • 一次性接收:执行完所有命令后,服务器一次性将所有结果返回给客户端。客户端接收到这个包含所有结果的响应包后,可以逐一解析并处理这些结果。

Pipeline 的主要优点

  • 降低网络延迟:通过减少网络往返次数,显著降低了网络通信的延迟开销,尤其在高延迟或高命令密度的场景下,性能提升尤为明显。
  • 提高吞吐量:由于减少了网络传输和解析响应的时间,使得单位时间内可以处理更多的命令,从而提高了 Redis 的整体吞吐量。
  • 优化资源利用率:对于服务器而言,连续处理一批命令比分散处理单个命令更利于 CPU 缓存的利用,有助于提高服务器端的处理效率。

9.原生批命令 (mset, mget) 与 Pipeline 区别?

1)原生批命令是原子性的,而 pipeline 是非原子操作。

2)原生批命令一命令多个 key, 但 pipeline 支持多命令(存在事务),非原子性。

3)原生批命令是服务端实现,而 pipeline 需要服务端与客户端共同完成。

 

 

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

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

相关文章

GhostNetV3:探索紧凑模型的训练策略

文章目录 摘要1、引言2、相关工作2.1、紧凑模型2.2、训练CNN的技巧包 3、预备知识4、训练策略4.1、重参数化4.2、知识蒸馏4.3、学习调度4.4、数据增强 5、实验结果5.1、重参数化5.2、知识蒸馏5.3、学习策略5.4、数据增强5.5、与其他紧凑模型的比较5.6、扩展到目标检测 6、结论 …

redis和mysql数据一致性方案

请求 A 更新数据 请求B读数据 在高并发情况下,A、B请求过程步骤相互穿插,就会出现图中的问题。 期望redis 的数据是11,最后变成了10 场景:先删除Redis,再更新 MySQL,不主动更新Redis,访问redi…

#ESP32S3R8N8建立工程(VSCODE)

1.参考文档 【立创ESP32S3R8N8】IDF入门手册 - 飞书云文档 (feishu.cn)https://lceda001.feishu.cn/wiki/GOIlwwfbIi1SC3k8594cDeFVn8g 2.建立工程 3.运行效果

2024年G2电站锅炉司炉证考试题库及G2电站锅炉司炉试题解析

题库来源:安全生产模拟考试一点通公众号小程序 2024年G2电站锅炉司炉证考试题库及G2电站锅炉司炉试题解析是安全生产模拟考试一点通结合(安监局)特种作业人员操作证考试大纲和(质检局)特种设备作业人员上岗证考试大纲…

No system certificates available. Try installing ca-certificates.

一、错误重现 Certificate verification failed: The certificate is NOT trusted. No system certificates available. Try installing ca-certificates. 具体如图 系统环境是ubuntu:22.04 ARM架构 二、解决方法 1、先不要更换镜像源 直接设置 apt update apt -y instal…

创新实训2024.04.24日志:RAG技术初探

1. 什么是RAG技术 RAG is short for Retrieval Augmented Generation。结合了检索模型和生成模型的能力,以提高文本生成任务的性能。具体来说,RAG技术允许大型语言模型(Large Language Model, LLM)在生成回答时,不仅依…

13. Spring AOP(一)思想及使用

1. 什么是Spring AOP AOP的全称是Aspect Oriented Programming,也就是面向切面编程,是一种思想。它是针对OOP(面向对象编程)的一种补充,是对某一类事情的集中处理。比如一个博客网站的登陆验证功能,在用户进行新增、编辑、删除博…

算法设计优化——有序向量二分查找算法与Fibonacci查找算法

文章目录 0.概述1.语义定义2. 二分查找(版本A)2.1 原理2.2 实现2.3 复杂度2.4 查找长度 3.Fibonacci查找3.1 改进思路3.2 黄金分割3.3 实现3.4 复杂度分析3.5 平均查找长度 4. 二分查找(版本B)4.1 改进思路4.2 实现4.3 性能4.4 进…

YOLOv8常见水果识别检测系统(yolov8模型,从图像、视频和摄像头三种路径识别检测)

1.效果视频(常见水果识别(yolov8模型,从图像、视频和摄像头三种路径识别检测)_哔哩哔哩_bilibili) 资源包含可视化的水果识别检测系统,可识别图片和视频当中出现的六类常见的水果,包括&#xf…

【redis】非关系型数据库——Redis介绍与安装(windows环境)

目录 数据库架构的演化单体架构缓存(Memcached)MySQL集群缓存(Memcached可以)MySQL集群垂直拆分(主从复制,读写分离)缓存(Redis)MySQL集群垂直拆分分库分表 NoSQLNoSQL产生的背景性能需求MySQL的扩展性瓶颈方面什么是NoSQLNoSQL的特点主流的N…

下级平台级联EasyCVR视频汇聚安防监控平台后,设备显示层级并存在重复的原因排查和解决

视频汇聚平台/视频监控系统/国标GB28181协议EasyCVR安防平台可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、云存储等丰富的视频能力,平台支持7*24小时实时高清视频监控,能同时…

C语言进阶|单链表的实现

✈链表的概念和结构 概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表 中的指针链接次序实现的。 链表的结构跟火车车厢相似,淡季时车次的车厢会相应减少,旺季时车次的车厢会额外增加几节。…

BSV区块链协会上线首个版本的ARC交易处理器

​​发表时间:2024年3月28日 BSV区块链协会近期上线了首个版本的ARC交易处理器。ARC是一项区块链交易处理服务,能在通过P2P网络广播交易之前验证并存储相关的交易。一旦新区块被挖出,一条与该交易相关的Merkle路径将被发回给交易发起者作为确…

长效静态代理IP如何改变你的SEO和网络营销策略?

长效静态代理IP为SEO和网络营销专家提供了一个强大的工具,通过这种技术,可以突破传统的限制,以全新的视角和方法优化其在线策略。这不仅增强了企业的市场竞争力,也为实现更高效、更精准的营销目标提供了可能。 一、长效静态代理IP…

Vue面试经验

Vue编译时声明周期的执行顺序 Vue中父子组件渲染顺序(同步引入子组件:import Son from ‘/components/son’ ) 父子组件编译时的生命周期执行顺序 这里修改data数据时也修改了dom,如过知识通过按钮对数据进行操作,那…

kafka大数据采集技术实验(未完待续)

Kafka环境搭建 下载地址:https://link.zhihu.com/?targethttps%3A//kafka.apache.org/downloads解压启动zookeeper bin/zookeeper-server-start.sh config/zookeeper.properties需要注意的是 : " c o n f i g / z o o k e e p e r . p r o p e r t i e s &q…

解密Java线程池源码

一、线程池中的保活和回收源码分析 1、线程池中线程的创建时机 1、核心线程创建时机 在研究线程池的源码前首先想一个问题 public class Main {public static void main(String[] args) {ThreadPoolExecutor executor new ThreadPoolExecutor(10, 20, 0l, TimeUnit.MILLIS…

从Linux角度具体理解程序翻译过程-----预处理、编译、汇编、链接

目录 前言: 翻译过程 1.预处理 2.编译 3.汇编 4.链接 Linux下对其理解: 1.预处理 拓展: Linux下文件信息: 文件类型: 硬链接数: 文件拥有者: 文件所属组: other&#x…

区块链安全应用-------压力测试

基于已有的链进行测试(build_chain默认建的链 四个节 点): 第一步:搭链 1. 安装依赖 在ubuntu操作系统中,操作步骤如下: sudo apt install -y openssl curl 2. 创建操作目录, 下载安装脚本 ## 创建操作…

3个比较不错的Linux云音乐应用程序整理

在现代音乐流媒体时代,基于云的音乐应用程序因其便利性和可访问性而变得非常流行。Linux 用户尤其寻求可靠且功能丰富的音乐播放器来无缝地享受他们喜爱的音乐。 在这里,我们探讨了三个最好的基于云的音乐应用程序,每个应用程序都提供专为 L…