做一个网站的预算,wordpress 分享 可见,做网站用什么格式做好,做网站的费用是多少钱目录
前言 持久化相关知识
1.三种持久化机制 2.RDB持久化
3.深入剖析一下RDB持久化过程
4.AOF持久化
5.RDB和AOF对比编辑
面试题
1.redis持久化机制有哪些#xff1f;
2.那仔细讲讲你对他们的理解
3.你刚刚说AOF的文件很大#xff0c;那AOF文件会越来越大#xf…目录
前言 持久化相关知识
1.三种持久化机制 2.RDB持久化
3.深入剖析一下RDB持久化过程
4.AOF持久化
5.RDB和AOF对比编辑
面试题
1.redis持久化机制有哪些
2.那仔细讲讲你对他们的理解
3.你刚刚说AOF的文件很大那AOF文件会越来越大 前言
开始Redis面试知识的复习和资料的收集收集和参考了网上的优质文章本篇文章会不断更新本系列文章主要分为两部分一部分是该专题所涉及的相关基础知识另一部分是面试题与思考题大部分重要知识和基础知识的延伸会在面试题和思考题中给出这样做的目的是给出具体的场景便于理解知识相较于直接在知识中展出且我会以相对口语化的方式叙述。
建议关注随着我复习的进度内容会一直得到补充 持久化相关知识
1.三种持久化机制
RDB持久化AOF持久化混合型持久化将RDB和AOF结合在一起这里就不过多赘述了 2.RDB持久化
RDB全称叫做Redis数据备份文件也叫做Redis数据快照,将内存中所有数据都记录到磁盘中当Redis故障或重启时从磁盘中读取快照文件恢复数据
主动进行RDB持久化
事实上redis有自己的自动触发持久化机制并且配置在了配置文件中
由上面可见两次备份间如果发生宕机会出现数据丢失因为其备份的频率很低
配置文件中关于RDB的其他配置 3.深入剖析一下RDB持久化过程
bgsave异或持久化可以做到几乎对主进程0阻塞为什么说是几乎呢因为主进程去fork这个子进程的时候是阻塞的为了让主进程尽快得去处理其他请求bgsave是如何实现:
在linux中所有进程都无法直接操作物理内存操作系统会为进程分配虚拟内存然后再虚拟内存中会有一个与物理内存做映射的表叫做页面通过这个对物理内存进行读写当fork子线程的时候不是把内存做拷贝而是把页表进行拷贝此时子进程就可以对内存中的数据进行修改这样无需拷贝内存中的数据就可以实现内存共享使得fork子线程的速度非常快
子线程就会读取内存中的数据并且写入磁盘中的一个RDB文件中来持久化并替换旧的RDB文件 但由于是异步的此时子进程正在读取数据主进程可能收到修改数据的指令此时读写会发生冲突为了解决这个问题copy采用了copy-on-write技术共享内存只能读当主线程要修改共享内存中的某个数据例如数据A时会将该数据A复制出来并进行修改此后对于数据A的读和写都在副本中进行
极端情况下当子线程读取数据存储到RDB文件内的速度很慢此时主线程收到了将所有数据进行修改的请求那么所有数据都要复制一份变成双倍内存 4.AOF持久化
AOF全称为Append Only File追加文件。Redis处理的每一个写命令都会记录在AOF文件可以看作是命令日志文件。 AOF默认是关闭的打开
AOF记录的频率: 由于是记录命令AOF比RDB文件大得多并且记录的大部分名称都是无效的只有对一个key的最后一次写操作才有意义可以通过bgrewriteaof命令让AOF文件执行重写功能
自动触发文件重写阈值: 5.RDB和AOF对比 面试题
1.redis持久化机制有哪些
RDBAOF混合型持久化 2.那仔细讲讲你对他们的理解
RDBRDB是通过将内存中当前进程的数据生成快照.rdb文件保存到硬盘中可以自动触发或者手动触发
自动触发的配置写在了配置文件中
900秒内如果至少1个key被修改就执行bgsave300秒内如果至少10个key被修改就执行bgsave10000秒内如果至少60个key被修改就执行bgsave
手动触发:save和bgsave其中save是主线程来进行生成RDB文件进行持久化过程会造成长时间阻塞一般使用bgsave主线程会fork一个子线程并将自己的快照文件复制给子线程子线程根据快照文件读取共享内存数据到.rdb文件中读取完成后替换旧的rbd文件进行持久化操作
RDB持久化的优点在于使用子线程来异步持久化主线程不会进行IO操作保证了Redis的高性能而且其存储的是压缩的二进制文件适用于备份全量复制并且其加载速度远大于AOF文件
缺点在于其持久化间隔时间比较长如果下一次持久化前发生宕机等故障会造成数据的丢失即无法做到实时持久化并且在fork子线程进行持久化时如果主线程进行修改操作需要对修改的数据先进行复制理论上最差的情况是全都复制一遍即占用两倍的内存。并且RDB二进制文件存在新老版本不兼容的问题. AOF:AOF持久化是将命令像日志一样写入文件中进行持久化其持久化策略有三种
其优点在于能将数据丢失的风险大大降低保证数据是最新的并且将命令写入文件的操作是异步的不允许主线程
缺点在于因为是保存所有命令其文件比RDB大得多数据恢复其实也就是执行命令的过程所以会慢很多 混合型持久化的优点在于效率大幅提升缺点在于最终文件为.aof文件在4.0版本之前不是被该aof文件且由于前部分时RDB格式阅读性差 3.你刚刚说AOF的文件很大那AOF文件会越来越大
AOF其实是有他的重写机制的当AOF文件比上一次重写时的文件大小增长100%并且文件大小不小于64M时会进行重写重写时如果客户端发生修改操作这边也是copy-on-write技术重写时新的变更操作会写到原AOF文件中同时这些变更操作会被Redis收集最差情况就和RDB一样两倍内存当内存数据被全部写入到新的AOF文件后新的变更操作会追加进去此后所有新的操作会写到新的aof文件中因为只有重写完成后才会更改写入文件所以如果发生故障不会影响到原来的aof文件所有比较可靠