整理好了!2024年最常见 20 道 Redis面试题(三)

上一篇地址:整理好了!2024年最常见 20 道 Redis面试题(二)-CSDN博客

五、Redis 的持久化机制有哪些?

Redis 是一个内存中的数据结构存储系统,它支持多种类型的数据结构,如字符串、哈希、列表、集合、有序集合等。为了保证数据的持久性,Redis 提供了几种不同的持久化机制,这样即使在系统崩溃的情况下,数据也不会丢失。以下是 Redis 的几种主要持久化机制:

  1. RDB(Redis Database)持久化

    • RDB 是一种快照式的持久化方式,它会在指定的时间间隔内生成数据集的时间点快照,并将其保存到磁盘上的一个 RDB 文件中。
    • 这种持久化方式适合于大规模的数据恢复,因为它可以非常快地加载整个数据集。
    • RDB 持久化是通过 SAVE 或 BGSAVE 命令来实现的。SAVE 是同步操作,会阻塞 Redis 服务器直到 RDB 文件创建完成;而 BGSAVE 是异步操作,它会派生出一个子进程来创建 RDB 文件,不会阻塞主进程。
  2. AOF(Append Only File)持久化

    • AOF 持久化通过记录每个写操作命令来记录数据的变化,并将这些命令追加到 AOF 文件中。
    • 这种持久化方式提供了更好的数据安全性,因为即使在系统崩溃的情况下,也可以通过重放 AOF 文件中的命令来恢复数据。
    • AOF 持久化可以配置为每次有写操作时都写入(always),或者每秒写入一次(everysec),或者在有足够写操作时写入(no-appendfsync-on-rewrite)。
    • AOF 文件通常比 RDB 文件大,但是 AOF 持久化可以提供更高的数据完整性。
  3. 混合持久化

    • 混合持久化结合了 RDB 和 AOF 的优点,可以在 RDB 快照的基础上,使用 AOF 来记录快照创建后的所有写操作。
    • 这种方式可以在系统崩溃时,通过 RDB 文件快速恢复大部分数据,然后通过 AOF 文件来恢复剩余的数据。
  4. 虚拟内存(VM)持久化

    • 虚拟内存持久化是 Redis 2.4 及更早版本中使用的一种持久化机制,它允许 Redis 将部分数据存储在磁盘上,以减少内存的使用。
    • 这种机制通过将不常用的数据页移动到磁盘上来实现,但是它在 Redis 2.6 以后的版本中已经被废弃。
  5. Redis 4.0 引入的模块化持久化

    • Redis 4.0 引入了模块化系统,允许开发者创建自定义的持久化模块。
    • 这为持久化提供了更多的灵活性和可能性,开发者可以根据自己的需求来实现特定的持久化策略。

每种持久化机制都有其优缺点,选择哪种持久化机制取决于具体的应用场景和需求。例如,如果数据安全性是首要考虑,可能会选择 AOF 持久化;如果需要快速的数据恢复,可能会选择 RDB 持久化。在实际应用中,很多用户会选择同时使用 RDB 和 AOF,以获得两者的优点。

六、Redis 的内存管理机制是如何工作的?

Redis 是一个内存中的数据存储系统,它以极高的效率处理数据。Redis 的内存管理机制是高效和复杂的,主要涉及以下几个方面:

  1. 内存分配

    • Redis 使用 jemalloc 作为其内存分配器,这是一个为多线程应用程序设计的内存分配库,旨在减少内存分配的开销和碎片。
    • jemalloc 通过使用多个分配器线程来并行处理内存请求,以及通过使用大页内存来减少内存碎片。
  2. 内存回收

    • 当 Redis 运行时,它会不断分配和释放内存。jemalloc 通过维护一个内存池来管理这些内存分配和释放,从而减少内存碎片。
    • 当内存不再使用时,jemalloc 会将其回收并返回到内存池中,以便将来再次使用。
  3. 内存碎片管理

    • 内存碎片是指由于内存分配和释放导致的内存空间不连续,这会降低内存的使用效率。
    • Redis 通过 jemalloc 的内存池机制来减少内存碎片,同时 Redis 也提供了 MEMORY PURGE 命令来尝试释放 jemalloc 的内存池中的未使用内存。
  4. 内存限制

    • Redis 允许设置最大内存使用量,通过配置文件中的 maxmemory 指令或运行时的 CONFIG SET maxmemory 命令来设置。
    • 达到内存限制后,Redis 会根据配置的内存淘汰策略来决定哪些键可以被删除,以释放内存空间。
  5. 内存淘汰策略

    • 当 Redis 达到内存限制时,它会根据配置的淘汰策略来选择删除哪些键。
    • 淘汰策略包括但不限于:volatile-lru(最近最少使用)、allkeys-lruvolatile-ttl(即将过期的键)、volatile-random(随机删除)、allkeys-randomnoeviction(不淘汰)。
  6. 内存统计和监控

    • Redis 提供了多种命令来监控内存使用情况,如 INFO MEMORY 命令可以提供详细的内存使用信息。
    • 用户可以通过这些命令来监控内存使用情况,并根据需要调整内存策略。
  7. 内存优化

    • Redis 支持数据压缩,例如,使用 ZIPLIST 编码的列表和哈希表可以减少内存使用。
    • 此外,Redis 4.0 引入了新的数据结构,如 Listpack 和 Quicklist,这些结构旨在提供更好的内存效率。
  8. 内存重用

    • Redis 会尝试重用不再使用的内存,例如,当一个键被删除时,其占用的内存空间可以被其他键重用。
  9. 内存子系统

    • Redis 4.0 引入了内存子系统,它允许开发者创建自定义的内存分配器,以适应特定的内存管理需求。

Redis 的内存管理机制是其高性能的关键因素之一。通过有效的内存分配、回收、碎片管理和监控,Redis 能够在内存中高效地存储和处理大量数据。

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

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

相关文章

Kylin系列

Kylin是一个开源的分布式分析引擎,主要用于在Hadoop/Spark等大数据平台上提供高性能的SQL查询接口和OLAP(联机分析处理)能力,以支持超大规模数据的查询和分析。以下是关于Kylin系列的详细解释: 基本概念与原理&#x…

基于springboot实现的校园博客系统

开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven…

Mac SourceTree配置ssh git仓库

一、准备条件 1、Mac系统电脑 2、安装好SourceTree 3、获取ssh git仓库地址 二、配置步骤 1、打开终端命令行 ssh -t rsa -C "xxx""xxx"代表注册git仓库时,使用的用户名,可以是字符串也可以是邮箱地址。 如果遇到输入密码&#xf…

c语言如何向文件读取字符串

如何在c语言中,读取文件,不用一个字符一个字符的读取,而是整个读取字符串 这里就用到fgets语句 fgets(str,n,fp) 它的功能是从fp指向的文件里读取一个长度为n-1的字符串,并一次性存入到str字符数组里,如果成功就返回…

Java Memorandum

Java Memorandum 1 定义安全的集合2 collection集合用迭代器删除元素时避免并发修改异常3 异常捕获4 RequestBody和RequestParam和Parameter区别4.1 RequestBody4.2 RequestParam4.3 Parameter 1 定义安全的集合 void old() {ArrayList<Apple> apples new ArrayList<…

无线网络安全技术基础

无线网络安全技术基础 无线网络安全风险和隐患 随着无线网络技术广泛应用,其安全性越来越引起关注.无线网络的安全主要有访问控制和数据加密,访问控制保证机密数据只能由授权用户访问,而数据加密则要求发送的数据只能被授权用户所接受和使用。 无线网络在数据传输时以微波进…

解决:git每次push or pull都要输入用户名和密码

到git工作目录执行以下命令 git config --global credential.helper store 然后再重新执行一次git pull,这次它还是提示你输入账号和密码&#xff0c;这次之后&#xff0c;它就会记录下账号和密码。以后再pull 或者push的时候&#xff0c;再也不用输入账户和密码了&#xff0…

数据访问层设计_6.连接对象管理设计

1.数据库连接管理 在基于JDBC的数据库应用开发中&#xff0c;数据库连接的管理是一个难点&#xff0c;因为它是决定该应用性能的一个重要因素。 对于共享资源&#xff0c;有一个很著名的设计模式——资源池。该模式正是为了解决资源频繁分配、释放所造成的问题。把该模式应用到…

Centos7.9安装卸载Docker

文章目录 1、官网安装1.1、卸载旧版本Docker1.2、通过rpm仓库安装1.2.1、设置仓库1.2.2、安装Docker Engine1.2.3、启动Docker1.2.4、验证安装 1.3、通过rpm软件包安装1.4、通过便捷脚本安装 2、yum安装2.1、安装docker-ce以及客户端2.2、启动docker2.3、配置镜像加速 3、卸载D…

Dubbo的发展历程与项目背景

项目背景 Dubbo起源于阿里巴巴内部&#xff0c;最初是为了解决日益增长的分布式服务调用需求而诞生的。在2011年前后&#xff0c;随着阿里巴巴集团业务的快速扩张&#xff0c;系统规模不断增大&#xff0c;传统的单体架构难以满足高并发、高可用的服务需求。因此&#xff0c;阿…

Linux安装刻录软件

在工作场景经常使用光盘和刻录机&#xff0c;在windows系统下有nero软件&#xff0c;在linux下有k3b,但是原始的k3b只能一次刻录&#xff0c;十分浪费光盘&#xff0c;这里我们使用经优麒麟优化过的刻录软件&#xff0c;实现多次追加刻录。 进入优麒麟软件仓库&#xff0c;需要…

vue3 watch里面可以await 么

在 Vue 3 中&#xff0c;watch 选项中的 handler 函数不支持 await 关键字。watch 用于监听数据的变化&#xff0c;并在变化时执行相应的回调函数。await 关键字只能在异步函数中使用&#xff0c;而 watch 中的 handler 函数默认不是异步函数。 如果你需要在 watch 中处理异步…

WorkManager使用技巧及各Android版本适配

WorkManager使用技巧及各Android版本适配 WorkManager是Android Jetpack中用于处理异步任务的库&#xff0c;它能够保证任务即使在应用关闭或设备重启后也能被执行。以下是WorkManager的使用技巧和代码示例&#xff0c;以及不同Android版本的适配方法。 1. 初始化WorkManager…

js前端---超级简单的版本号排序

问题&#xff1a; 封装一个函数进行版本号排序处理 思路&#xff1a; 1.使用数组自带sort方法&#xff1b; 2.需要将sort里面的只以点分割成数组&#xff1b; 3.判断数组长度&#xff0c;进行排序&#xff1b; 4.如果数组长度相同&#xff0c;在进行循环&#xff0c;两个数组…

项目管理—需求管理规程(软件研发过程标准,管理标准,标书技术编写,资质评审,安全管理体系,项目交付,实施运维,各类建设方案)

软件资料清单列表部分文档清单&#xff1a;工作安排任务书&#xff0c;可行性分析报告&#xff0c;立项申请审批表&#xff0c;产品需求规格说明书&#xff0c;需求调研计划&#xff0c;用户需求调查单&#xff0c;用户需求说明书&#xff0c;概要设计说明书&#xff0c;技术解…

30.包名的修改和新建后端模块

权限和第三方登录确实令人头疼,我们来学一点简单一点的。 另外,如果各位有属于自己的域名和ICP/IP备案,布置一个作业,自行实现第三方QQ登录。 我们所说的包名修改,是一次性修改ruoyi的全部包名,因为发现很多人有这样的需求,下载别人的代码,想要改成自己公司的包名,结…

C++ 时间处理-从字符串中解析日期时间

1. 关键词2. 问题3. 解决思路4. 代码实现5. 测试代码6. 运行结果7. 源码地址 1. 关键词 C 时间处理 从字符串中解析日期时间 跨平台 2. 问题 C如何将字符串的日期时间解析成对应的时间戳&#xff1f; 3. 解决思路 可以用正则表达式将字符串解析成 struct tm 类型的对象。…

Java数据结构与算法(栈判断回文链表)

前言 回文链表的判断最适合用栈。 实现原理 1.找到链表中间节点。 2.反转后半段节点。 3.从头比较链表头节点的值和反转后的链表值。 具体代码实现 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode…

Spring Boot:SpringBoot 如何优雅地定制JSON响应数据返回

一、前言 目前微服务项目中RESTful API已经是前后端对接数据格式的标配模式了&#xff0c;RESTful API是一种基于REST&#xff08;Representational State Transfer&#xff0c;表述性状态转移&#xff09;原则的应用程序编程接口&#xff08;Application Programming Interfac…

了解Project

可以用来制定范围管理计划(WBS)&#xff0c;进度管理计划&#xff0c;资源分配&#xff0c;计算成本&#xff0c;跟踪进度&#xff0c;汇报进度 编制进度计划步骤&#xff1a;创建工作分解结构—建立工作之间的依赖关系—估计工作周期 工时和小时&#xff1a;小时是连续工作&am…