首页 > 数据库 >Redis面试准备 第二天

Redis面试准备 第二天

时间:2024-06-16 13:57:35浏览次数:10  
标签:AOF 持久 文件 Redis 面试 第二天 RDB 数据

什么是Redis持久化?

        持久化就是把内存的数据写到磁盘中去,防止服务宕机了内存数据丢失

为什么要做Redis持久化?

        持久化的目的是做灾难恢复,当redis宕机时,能尽快恢复缓存数据,对外提供服务。有人会问,redis不是缓存吗,为什么要持久化呢,直接重启继续提供服务不就好了吗?

        如果redis刚刚恢复,之前的缓存都无法命中,就会全部请求到数据库,直接导致mysql也雪崩

Redis的持久化机制是什么?

Redis 提供两种持久化机制 RDB(默认) 和 AOF 机制:

  • RDB:在指定时间间隔,执行数据集的时间点快照将Redis的数据集保存到一个RDB文件中
  • AOF:以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(读操作不记录),只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作

RDB和AOF机制的优缺点?

REDAOF
优点
  • 性能高:RDB是将Redis的数据以二进制形式保存到磁盘上,恢复数据时可以快速加载整个数据集,适合用于备份和灾难恢复
  • 紧凑性:RDB文件是一个紧凑的二进制文件,可以节省磁盘空间
  • 容灾性:RDB文件可以用于备份和灾难恢复,可以在Redis出现故障时快速恢复数据
  • 数据安全性高:AOF以追加的方式记录每个写操作的日志,因此可以保证数据的完整性和一致性
  • 恢复精确度高:通过重放AOF日志,可以精确地恢复Redis的状态
缺点
  • 数据丢失风险:RDB采用定期快照的方式进行持久化,如果Redis在最近一次快照之后发生故障,可能会丢失最近的数据
  • 恢复速度较慢:在恢复数据时,需要加载整个RDB文件,如果数据集较大,会导致较长的恢复时间
  • 文件体积大:AOF文件记录了每个写操作的详细日志,因此相对于RDB文件,AOF文件会更大
  • 恢复速度较慢:在恢复数据时,需要逐条重放AOF日志,如果日志较大,会导致较长的恢复时间

如何选择合适的持久化方式?

考虑因素:

  1. 数据安全性要求:如果数据的安全性是最重要的考虑因素,可以选择AOF持久化机制;AOF以追加日志的方式记录每个写操作,可以保证数据的完整性和一致性
  2. 恢复速度要求:如果需要快速恢复数据,可以选择RDB持久化机制;RDB文件是一个紧凑的二进制文件,可以快速加载整个数据集
  3. 磁盘空间和网络带宽:如果对磁盘空间和网络带宽有限制,可以考虑使用RDB持久化机制;RDB文件是紧凑的二进制文件,相对于AOF文件会占用更少的磁盘空间和网络带宽
  4. 备份和灾难恢复:如果需要进行备份和灾难恢复,可以选择RDB持久化机制;RDB文件可以用于快速备份和恢复数据
  5. 双重保护:为了提高数据的安全性和可靠性,可以同时使用RDB和AOF持久化机制;RDB可以用于快速备份和恢复数据,AOF可以提供更高的数据安全性

 Redis持久化数据和缓存怎么做扩容?

持久化数据的扩容缓存的扩容
RDB持久化:如果使用RDB持久化机制,可以通过增加更多的Redis实例来扩容、每个实例都会生成自己的RDB文件,可以将数据分散到多个实例中进行持久化分片:可以将缓存数据分片到多个Redis实例中,每个实例负责一部分数据、可以通过哈希算法或者一致性哈希算法来确定数据属于哪个实例
AOF持久化:如果使用AOF持久化机制,可以通过增加更多的Redis实例来扩容、每个实例都会追加自己的AOF日志文件,可以将写操作分散到多个实例中进行持久化集群:可以使用Redis Cluster来搭建一个分布式缓存集群、Redis Cluster将数据分片到多个节点上,并提供自动的故障转移和数据重分布功能

  • 数据一致性:在扩容过程中,需要确保数据的一致性、可以使用数据迁移工具或者自定义脚本来将数据从旧的实例迁移到新的实例上
  • 负载均衡:在扩容后,需要确保数据和请求能够均匀地分布到各个实例上、可以使用负载均衡器或者代理来实现请求的均衡分发

标签:AOF,持久,文件,Redis,面试,第二天,RDB,数据
From: https://blog.csdn.net/weixin_63164764/article/details/139719101

相关文章

  • 2024hw蓝队面试题-3
    Linux有哪些提权思路常用的有以下几种:1.SUID提权:在Linux中,如果一个可执行文件的SUID被设置,那么该文件将以拥有者的权限运行,而不是以执行者的权限运行。因此,如果用户找到了一个SUID为root的文件并成功地使其执行了恶意代码,那么该用户将会获得root权限。2.利用系统漏洞:这是最......
  • Redisson详解
    目录第1章:Redisson简介第2章:Redisson的架构与原理第3章:Redisson的基本使用连接Redis基本操作高级数据结构操作分布式锁的使用第4章:Redisson的高级特性分布式数据结构发布/订阅模型延迟队列与阻塞队列第5章:Redisson的分布式服务分布式锁的实现与应用分布式集合......
  • 数据库面试题(持续更新中)
    1.oracle与mysql的区别1.对事务的提交   MySQL默认是自动提交,而Oracle默认不自动提交,需要用户手动提交,需要在写commit;指令或者点击commit按钮2.分页查询   MySQL是直接在SQL语句中写"select...from...where...limit x,y",有limit就可以实现分页;而Oracl......
  • [面试题]Spring MVC
    考虑到SpringMVC和Rest关系比较大,所以本文一共分成两大块:SpringMVCRESTSpringMVCSpringMVC框架有什么用?SpringWebMVC框架提供”模型-视图-控制器”(Model-View-Controller)架构和随时可用的组件,用于开发灵活且松散耦合的Web应用程序。MVC模式有助......
  • 多线程面试基础篇(面试必备,值得收藏)
    1.并发与并行并行:指两个或多个事件在同一时刻发生(同时执行)。并发:指两个或多个事件在同一个时间段内发生(交替执行)。并发指的是在一段时间内宏观上有多个程序同时运行,微观上这些程序是分时的交替运行在多个CPU系统中,则这些可以并发执行的程序便可以分配到多个处理器上(CPU),......
  • python学习 - 操作redis数据库常用指令 案例
    #-*-coding:UTF-8-*-importredisimporttimeclassTestRedis:def__init__(self):self.dbconn=NonedefopenRedis(self):#连接redis,加上decode_responses=True,写入的键值对中的value为str类型,不加这个参数写入的则为字节类型。......
  • Java高手的30k之路|面试宝典|精通跳表SkipList
    跳表SkipList跳表(SkipList)是一种数据结构,它在有序链表的基础上,通过增加多级索引来提高查找、插入和删除操作的效率。跳表的平均时间复杂度为O(logn),与平衡树(如红黑树、AVL树)相当,但实现起来更为简单。跳表的结构跳表由多层链表组成,每一层都是一个有序链表。底层(第0......
  • 软件测试面试准备 第三天
    给一个页面,你会从哪些方面进行测试?    单个功能测试-----交互功能测试-----界面测试------易用性测试------兼容性测试-------安全测试-----性能测试黑盒和白盒的测试方法分别有哪些?    常用的黑盒测试方法:等价类划分法、边界值分析法、因果图法、场景法、......
  • 前端面试题日常练-day71 【面试题】
    题目希望这些选择题能够帮助您进行前端面试的准备,答案在文末好的,以下是另外五个与Sass相关的选择题:Sass中,以下哪个符号用于声明一个变量?a)$b)@c)#d)&在Sass中,以下哪个符号用于引入其他Sass文件?a)@importb)$c)#d)&Sass中的混合器(Mixin)用于什么目的?a......
  • 前端面试题日常练-day69 【面试题】
    题目希望这些选择题能够帮助您进行前端面试的准备,答案在文末TypeScript中,以下哪个关键字用于声明一个变量的类型为联合类型?a)unionb)anyc)alld)|在TypeScript中,以下哪个符号用于声明一个变量的类型为对象类型?a){}b)[]c)()d)<>TypeScript中的枚举(Enum......