Redis面试真题总结(四)

文章收录在网站:http://hardyfish.top/

文章收录在网站:http://hardyfish.top/

文章收录在网站:http://hardyfish.top/

文章收录在网站:http://hardyfish.top/

在这里插入图片描述

AOF 持久化?

AOF(Append Only File)持久化是Redis提供的另一种数据持久化方法。

通过AOF持久化,Redis将写操作追加到一个文件中

  • 以保证数据在重启或者异常情况下的持久性。

AOF持久化工作原理:

追加写操作:

  • 当有写操作(增删改)发生时,Redis会将这些写操作以文本的形式追加到AOF文件末尾。

文件同步:

  • Redis会通过fsync()系统调用将AOF文件的内容强制刷写到磁盘上,以保证数据的持久性。
  • 可以通过配置appendfsync参数来调整同步频率
    • 可以选择每次写入都同步(always)、每秒同步一次(everysec)或者操作系统自行决定(no)。

文件重写:

  • 当AOF文件变得过大时,可以通过BGREWRITEAOF命令触发AOF文件的重写。
  • Redis会启动一个子进程,将当前内存中的数据重写到一个新的AOF文件中,并且优化写入操作,减小AOF文件的体积。

恢复数据:

  • 在Redis重启的时候,会通过加载AOF文件中保存的写操作来恢复数据,重建内存中的数据状态。

AOF持久化的优点:

数据可靠性高:

  • AOF持久化记录了写操作的历史记录,因此在异常断电或者重启时
    • 可以通过AOF文件将数据快速恢复,避免了数据丢失的风险。

数据实时性高:

  • 相比于RDB持久化的定期快照记录,AOF持久化会实时追加写操作到AOF文件中
    • 因此对于实时性要求较高的应用场景更为适合。

可读性好:

  • AOF文件以纯文本形式记录写操作,可以直接查看和修改AOF文件,方便进行恢复和数据分析。

AOF持久化的缺点:

文件体积较大:

  • 由于AOF记录了所有的写操作历史,因此AOF文件会比RDB文件大,可能会占据更多的磁盘空间。

写入操作耗时:

  • 由于每次写操作都需要追加到AOF文件中,相比于RDB持久化,AOF持久化会有一定的写入延迟,可能会影响Redis的性能。

文件重写需要时间:

  • 当AOF文件变得过大时,进行AOF文件的重写是一项耗时的操作,可能会对Redis的性能产生一定影响。

Redis默认采用哪个持久化方式?

Redis默认采用的持久化方式是RDB(Redis Database)持久化。

  • 在默认配置下,Redis将周期性地将内存中的数据生成快照并写入磁盘,以保证数据的持久性。

RDB持久化通过将数据以二进制的形式保存到磁盘的RDB文件中,包含了Redis数据的全量快照。

  • 可以通过配置文件中的save参数来设置快照生成的条件
    • 比如在指定的时间间隔内、指定的写操作次数等。

Redis 内存淘汰策略有哪些?

Redis提供了一些策略,以便在届满最大内存限制时进行内存淘汰:

noeviction:

  • 当内存不足以容纳更多数据时,新的写入操作会报错。这是默认策略。

allkeys-lru:

  • 在内存不足时让位于新值内容的,是最近最少使用的键(LRU:Least Recently Used)。

volatile-lru:

  • 在设置了过期时间的键中,淘汰最近最少使用的键,新的写入操作会报错。

allkeys-random:

  • 在内存不足时随机删除某个键的值,为新值让出空间。

volatile-random:

  • 在设置了过期时间的键中,随机淘汰一些键。

volatile-ttl:

  • 在设置了过期时间的键中,有更早过期时间的键优先被淘汰。

如果你的程序可以接受偶发的性能下降,allkeys-lru可能是一个好选择。

如果你知道一些键是可以安全删除的,你可以为它们设置过期时间,然后使用volatile-lru

如果数据的重要性不等,你可以为重要的数据设置过期时间,然后使用volatile-ttl策略。

Redis过期键的删除策略

Redis使用过期键的删除策略来自动清除已经过期的键,以释放内存空间。

Redis采用了多种策略来删除过期键,具体的删除策略由配置参数eviction决定。

常见的策略包括:

定期删除策略(定时删除):

  • Redis会在每个指定的时间间隔(由配置参数hz决定)内,检查一批键是否过期,然后删除过期的键。
  • 这种策略不会频繁地检查每个键是否过期,因此对CPU的消耗较少。

惰性删除策略(懒汉式删除):

  • 当访问某个键时,Redis会先检查该键是否过期,如果过期则立即删除。
  • 这种策略相对更加高效,因为它只会在需要时才进行检查和删除操作。

定期删除与惰性删除的结合:

  • Redis同时使用了定期删除和惰性删除两种策略,在有限的时间间隔内通过定期删除来批量清除过期键
    • 同时在读写操作中使用惰性删除来保证及时的清理。

需要注意的是,无论采用哪种删除策略,Redis并不是立即清除过期键

  • 而是通过在查询和写入操作时进行过期键的检查和删除。

因此,在过期时间到达之后,过期键可能仍然存在一段时间,直到Redis执行删除操作。

  • 如果需要确保即时删除过期键,可以使用DEL命令主动删除过期键。

同时,可以通过配置参数maxmemory来限制Redis使用的内存大小

  • 当达到内存限制时,Redis会根据所采用的删除策略来淘汰一些数据以释放内存空间。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Selenium4.0实现自动搜索功能

01.Selenium4.0实现搜索功能 1.安装Selenium及查看Selenium版本 pip install selenium pip show seleniumfrom selenium import webdriver from chromedriver_py import binary_path import time from selenium.webdriver.common.by import By from selenium.webdriver.commo…

智能农业系统——土壤养分运移转化

橙蜂智能公司致力于提供先进的人工智能和物联网解决方案,帮助企业优化运营并实现技术潜能。公司主要服务包括AI数字人、AI翻译、AI知识库、大模型服务等。其核心价值观为创新、客户至上、质量、合作和可持续发展。 橙蜂智农的智慧农业产品涵盖了多方面的功能&#x…

鸿蒙OpenHarmony【轻量系统内核扩展组件(C++支持)】子系统开发

C支持 基本概念 C作为目前使用最广泛的编程语言之一,支持类、封装、重载等特性,是在C语言基础上开发的一种面向对象的编程语言。 运行机制 C代码的识别主要由编译器支持,系统主要对全局对象进行构造函数调用,进行初始化操作。…

H264-NAL

目录 错误日志NAL简介参考资料 错误日志 拉流时存在如下日志,会因为拉流失败导致之后的任务也停止 missing picture in access unit with size 16384 Invalid NAL unit size Error splitting the input into NAL units. 之后只要设置抓取异常后,重新拉流&#xff…

zabbix email 告警

配置媒介、触发器动作(动作、操作) 为用户 定义媒体,比如电子邮件地址 动作 - 条件

手机在网状态查询接口如何用PHP进行调用?

一、什么是手机在网状态查询接口? 手机在网状态查询接口,即输入手机号码查询手机号在网状态,返回有正常使用、停机、在网但不可用、不在网(销号/未启用/异常)、预销户等多种状态。 二、手机在网状态查询适用哪些场景…

数据结构(7.3_4)——红黑树的定义和性质

红黑树和平衡排序二叉树的查插删时间 平衡二叉树的适用场景&#xff1a;适用以查为主、很少插入/删除vd场景 红黑树&#xff1a;适用于频繁插入、删除的场景&#xff0c;实用性更强 红黑树的考点 红黑树的定义&#xff1a; 红黑树的二叉排序树&#xff1a;左子树结点值<…

EvilScience靶机详解

主机发现 arp-scan -l 得到靶机ip 192.168.229.152 端口扫描 nmap -sV -A -T4 192.168.1.20 这段代码使用 nmap 命令来扫描目标主机 192.168.1.20&#xff0c;并执行以下操作&#xff1a;-sV&#xff1a;探测开放的端口&#xff0c;以确定服务/版本信息。-A&#xff1a;启…

【软件工程】可行性研究

一、目的 二、任务 三、步骤 四、结果&#xff1a;可行性研究报告 例题 选择题

Java基础-零拷贝

文章目录 什么是零拷贝&#xff1f;传统IO执行过程零拷贝的意义零拷贝的主要实现方式实际应用场景零拷贝的优势零拷贝的局限性 Java 中的零拷贝实现FileChannel.transferTo()FileChannel.transferFrom() 相关知识点解释什么是DMA内核空间和用户空间什么是用户态、内核态什么是上…

前端——实现时钟 附带小例子

创建日期对象 toLocaleDateString() 获取日期 console.log(date.toLocaleDateString()) toLocaleTimeString() 获取时间 console.log(date.toLocaleTimeString()) toLocaleString() 获取日期和时间 console.log(date.toLocaleString()) date.getDay() 获取星期几 周日为…

计算机毕业设计选题推荐-基于python+Django的全屋家具定制服务平台

精彩专栏推荐订阅&#xff1a;在下方主页&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f496;&#x1f525;作者主页&#xff1a;计算机毕设木哥&#x1f525; &#x1f496; 文章目录 一、全屋家具定制…

H264参考帧列表管理

P/SP/B帧的参考帧列表的初始化 参考H.264标准文档的8.2.4.2章节&#xff0c;暂不研究场编码。在初始化P/SP帧或B帧的参考帧列表过程中&#xff0c;DPB中至少要存在一个有效的、即被标记为“用于短期或长期参考”的参考帧。 P/SP Slice 参考帧列表初始化 P/SP Slice参考帧列表…

《算法岗面试宝典》正式发布

大家好&#xff0c;历时半年完善&#xff0c;《算法岗面试宝典》 终于可以跟大家见面了。 最近 ChatGPT 爆火&#xff0c;推动了技术圈对大模型算法场景落地的热情&#xff0c;就业市场招聘人数越来越多&#xff0c;算法岗一跃成为竞争难度第一的岗位。 岗位方向 从细分方向…

汽车总线之----CAN总线

Introduction 早期的车辆网络是点对点的模式&#xff0c;臃肿繁杂且效率低下 现在是以总线的模式&#xff0c;很明显线路简洁清爽了很多。 高速CAN可以支持1M/s的速率&#xff0c;低速CAN可以支持125k/s的速率 CAN节点的内部结构图(Structure of CAN-Bus and electronic C…

*C++:list

一.list简介 1. list 是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代。 2. list 的底层是双向链表结构&#xff0c;双向链表中每个元素存储在互不相关的独立节点中&#xff0c;在节点中通过指针指向其前一个元素和后一个元素…

redisson 延迟队列实现任务过期监听

一、需求&#xff1a; 任务超过一个小时以后&#xff0c;如果还为待执行状态&#xff0c;则自动转为结束状态。 二、实现: 创建延迟队列的监听任务RedisDelayedQueueListener&#xff0c;消费延迟队列&#xff1b;创建新增延迟队列的类&#xff0c;用于创建延迟队列&#xf…

ACM MM24 | Hi3D: 3D生成领域再突破!新视角生成和高分辨率生成双SOTA(复旦智象等)

文章链接&#xff1a;https://arxiv.org/pdf/2409.07452 Github 链接&#xff1a;https://github.com/yanghb22-fdu/Hi3D-Official 亮点直击 本文提出了高分辨率图像到3D模型&#xff08;Hi3D&#xff09;&#xff0c;这是一种基于视频扩散的新范式&#xff0c;将单个图像重新定…

Codeforces Round 974 (Div. 3) G. Milky Days

题目 题解 #include<bits/stdc.h> using namespace std; #define int long long #define ll long long #define ld long double #define pb push_back #define fi first #define se second #define pii pair<int, int> #define lson p << 1 #define rson p …

Mapper核心配置文件

文章目录 environment 数据库环境typeAlias 起别名 environment 数据库环境 typeAlias 起别名