论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
数据库
›
Oracle
›
回忆Redis的持久化机制
回忆Redis的持久化机制
丝
金牌会员
|
昨天 06:46
|
显示全部楼层
|
阅读模式
楼主
主题
868
|
帖子
868
|
积分
2604
前言
大家都知道,Redis是内存数据库,也就是说client与Redis交互的过程,无论是读key还是写key都是直接访问Redis的内存即可,但对于宕机备份容灾等问题,就需要引入持久化,Redis提供RDB或AOF,另有从版本4.0开始引入这RDB和AOF两种的混淆持久化方式。
RDB
RDB持久化是通过创建快照来获取内存某个时间点上的副本,以是重启redis时使用快照可以方便恢复,默认快照文件为dump.rdb。
触发方式
设置方式
通过设置每隔n秒有m个key发生变化,即会触发,天生一次RDB;
手动触发
可利用save和bgSave下令(默认bgSave),生产上应该用bgSave,因为相比save只用主线程进行RDB,后者是fork一个子历程来进行,避免阻塞主线程实验client的利用下令。
bgsave的实验流程
①起首检查是否有在实验RDB或AOF的子历程在实验,假如有就返回错误;
②此时触发RDB,调用的是rdbSaveBackgroud;
③开始fork子历程,同时主历程继续实验client的发送的利用下令;
④RDB完成后,会替换为新的dump文件,子历程停止;
此中关于fork子历程,会阻塞主线程微秒级别的性能,阻塞也不是直到fork子历程竣事,而是为了加快它fork子历程的效率,使用到写时复制的机制;
写时复制的意思是,利用系统中历程访问内存,是每个历程都有自己的虚拟内存(例如32位最大虚拟内存为4G),然后通过页表中绑定物理内存的关系来映射物理内存,假如历程没有虚拟内存访问物理内存,则会发生缺页非常,以是bgsave在fork子历程时,
只是将主线程地点历程访问物理内存的页表复制一份,将它设置为可读,主历程完成工作了
,避免阻塞直到fork完成,如许当主历程或子历程需要修改内存时,才会触发缺页非常,此中内核的缺页非常处理惩罚函数中,会将主历程所用物理内存,复制一份到子历程,此时才算fork完成;
缺点
会数据丢失,因为通常是通过设置的方式触发天生RDB,是每隔n秒假如有m个key变更就会触发,那已有m-1个key变更,未到达持久化条件,此时宕机,就会丢失这段时间变更的key了。
AOF
不像RDB产生快照,它是client的每个写利用下令,以追加的形式写入到磁盘的AOF文件,在redis重启时会重新实验AOF文件中的写下令即可将数据恢复到内存中;
此中AOF,它是有三种写入策略的,可以通过在redis.conf设置:
重写机制
不像RDB的二进制小文件,因为每个写下令都会追加AOF文件,那体积会越来越大,例如不停set key a,set key b,set key c,这些对同一个key的不停赋值,可以使用重写机制,只写入最新的value为c即可,很好的节流文件巨细。
而且重写机制为避免影响正常的实验下令,也不是只用到主线程的,说说重写过程:
①起首创建一个子历程,负责AOF的重写利用;
②根据当前reids的内存数据的值,目前redis对于key的最新值就是c了,写入新的AOF文件,如list中有所有元素,也是用RPUSH下令将所有元素写入,而不是写入该list逐个添加元素的纪录;
③在重写的过程中,还是会继续吸收client的利用哀求,为了避免数据不同等,主历程会将这些新的写下令同时写入一个缓冲区(aof_rewrite_buf)中;
④在重写机制完成后,会将aof_rewrite_buf缓冲区的写下令继续添加到新的AOF文件中;
⑤将新的AOF文件替换掉旧的AOF文件;
触发方式
手动触发
使用BGREWRITEAOF触发AOF重写;
自动触发
通过设置文件中的参数控制自动触发条件,要设置下面这两个参数:
auto-aof-rewrite-min-size:AOF文件到达该巨细时允许重写,默认是64M;
auto-aof-rewrite-percentage:当前AOF文件巨细相对于上次重写后的增长百分比到达该值出发重写;
MP-AOF
上面的重写机制,是存在严重的内存开销,因为在重写过程中,除了写原来的aof缓冲区,然后再到aof旧文件,还写入了一份重复的aof_rewrite_buf内存开销,而且还会消耗cpu的开销。
MP-AOF机制,它是将AOF原来的一份文件,改成三个文件,如下,第一个“ll”下令查看的是重写前的三个文件,第二个“ll”查看的是重写后的三个文件
一开始base.aof文件是为0,正常实验client的写下令,会追加到incr.aof文件,触发重写后,将incr.aof文件的内容重写,也就是只获取最新的key值,往base.aof文件写,可以看到aof.1.base.aof酿成aof.2.base.aof文件了,然后incr.aof也从2开始了,避免在重写过程中,写多了一份在aof_rewrite_buf缓冲区,大大节流内存和cpu消耗。
RDB和AOF混淆模式
即使用了RDB加载快的长处,还使用了AOF保存下令完备性的长处;
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
丝
金牌会员
这个人很懒什么都没写!
楼主热帖
ShardingSphere 异构迁移最佳实践:将3 ...
MySQL 5.7 安装教程(全步骤、保姆级教 ...
本科毕设CTF平台-MarsCTF
KubeEdge 1.12版本发布,稳定性、安全 ...
Redis介绍与安装
15.Linux和Windows入侵排查
mysql数据迁移,通用windows->linux,li ...
Grafana 系列文章(一):基于 Grafana ...
Spring Data JPA系列2:SpringBoot集成 ...
学生信息管理系统(JAVA+MYSQL) ...
标签云
存储
挺好的
服务器
快速回复
返回顶部
返回列表