当前位置: 首页 > article >正文

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.kler.cn/a/314935.html

相关文章:

  • 实时渲染技术如何助力3D虚拟展厅?
  • Autosar CP DDS规范导读
  • P8680 [蓝桥杯 2019 省 B] 特别数的和
  • Qt 获取当前系统中连接的所有USB设备的信息 libudev版
  • 使用electron-egg把vue项目在linux Ubuntu环境下打包并安装运行
  • 【知识科普】SPA单页应用程序介绍
  • 多模态交互才是人机交互的未来
  • MoFA: 迈向AIOS
  • 【QGIS入门实战精品教程】6.1:QGIS根据属性条件查询数据(SQL表达式)
  • 如何在GitHub上Clone项目:一步步指南
  • 暑假考研集训营游记
  • 李宏毅机器学习2023-HW13-Network Compression
  • 4.《DevOps》系列K8S部署CICD流水线之Helm部署Harbor私人镜像仓库
  • 机器学习中求解模型参数的方法
  • LabVIEW编程能力如何能突飞猛进
  • 【数据优化】基于GEE填补遥感缺失数据
  • 测试面试题:接口自动化测试流程?
  • Vue3入门 - ElementPlus中左侧菜单和Tabs菜单组合联动效果
  • linux下的日志编写
  • Linux 文件 IO 管理(第二讲)(重定向和缓冲区)
  • 鸿蒙开发的基本技术栈及学习路线
  • 【JVM安装MinIO】
  • IO流中的异常捕获
  • 搜索引擎onesearch3实现解释和升级到Elasticsearch v8系列(三)-文档
  • C++模版初阶
  • claude,gpt,通义千问