当前位置:网站首页>Do you really understand the persistence mechanism of Redis?
Do you really understand the persistence mechanism of Redis?
2022-07-29 15:47:00 【InfoQ】
Redis持久化

RDB快照
- save 900 1 900秒内有1个键发生改变
- save 300 10 30秒内有10个键发生改变
- save 60 10000 60秒内有10000个键发生改变
写时复制机制(COW)
【文章福利】另外小编还整理了一些C/C++后台开发教学视频,相关面试题,后台学习路线图免费分享,需要的可以自行添加:
Q群:720209036 点击加入~
群文件共享
小编强力推荐C++后台开发免费学习地址:
C/C++Linux服务器开发高级架构师/C++后台开发架构师



优点
- Redis宕机后数据恢复快
- 二进制文件体积小
缺点
- 持久化策略可能会导致在宕机时数据丢失量较多
AOF(append-only file)

- appendonly no 默认情况下是no, 将no改为yes即可开启AOF持久化方式,Redis会将修改的每一条指令先记录到系统缓存,默认每隔一秒钟就把缓存刷新到appendonly.aof磁盘文件中 当 Redis 重新启动时, 程序就可以通过重新执行 AOF 文件中的命令来达到重建数据集的目的.
演示

*2
$6
SELECT
$1
0
*3
$3
SET
$1
1
$1
2
*3
$3
SET
$4
key1
$4
val1
*3
$3
SET
$4
3124
$3
124
*3
$3
SET
$5
key14
$4
key2
AOF持久化策略
- appendfsync always:每次有新命令追加到 AOF 文件时就执行一次 fsync ,非常慢,也非常安全,不建议用,本身Redis就是借助的内存快的优势,要是每次操作都访问磁盘这个优势就没了.
- appendfsync everysec:每秒 fsync 一次,足够快,并且在故障时只会丢失 1 秒钟的数据,AOF默认会走在这个配置.
- appendfsync no:从不 fsync ,将数据交给操作系统来处理.更快,也更不安全的选择,发生宕机时,丢失的数据最多.
AOF重写
- auto‐aof‐rewrite‐min‐size 64mb //aof文件至少要达到64M才会自动重写,文件太小恢复速度本来就 很快
- auto‐aof‐rewrite‐percentage 100 //aof文件自上一次重写后文件大小增长了100%则再次触发重写

- 将 AOF 重写缓冲区中的所有内容写入到新的 AOF 文件中,保证新 AOF 文件保存的数据库状态和服务器当前状态一致.
- 对新的 AOF 文件进行改名,原子的覆盖现有 AOF 文件,完成新旧文件的替换
- 服务低峰期定时重写
- 使用ssd,提升持久化效率
优点
- 数据完整性要高于RDB,默认情况下,最多丢失1秒钟的数据.
缺点
- Redis宕机后数据恢复慢
- 文件体积大
混合持久化(sence redis4.0)
- aof‐use‐rdb‐preamble yes
总结
- RDB文件会保存Redis中所有的键值对数据
- save生成RDB文件会阻塞主进程
- bgsave命令后台生成RDB,不会阻塞主进程
- RDB文件体积小,保存的是二进制数据
- RDB通过配置策略执行,可能会丢失部分数据
- RDB文件在Redis宕机后恢复快
- AOF文件保存的是客户端执行的命令
- AOF文件体积大,恢复慢,但是默认配置下数据比RDB要全很多
- Redis宕机重启后默认是用AOF方式进行恢复
- AOF文件中的命令是以Resp协议格式保存的
- 命令会先保存到缓冲区,再定期同步到AOF文件
- AOF会根据配置策略自动的对AOF文件进行重写,以降低文件体积
- AOF重写时会fork一个子进程去执行,同时会有一个重写缓冲区,用来保存重写时主进程修改的键
- AOF重写时,最后会生成一个新的AOF文件,覆盖原有的文件
- 将重写缓冲区的内容写入到AOF与替换新旧AOF文件时会阻塞主进程
- 混合持久化是RDB与AOF的优势结合所产生的
- 混合持久化本质还是用的AOF文件
- 混合持久化使用的前提是开启AOF持久化
- 混合持久化在重写AOF文件时会将数据直接写成RDB的二进制格式,之后新的命令还是以AOF文件Resp协议格式进行保存
附
fsync
子进程
参考资料

边栏推荐
猜你喜欢
Numpy
AOP implementation enterprise API access interface monitoring (via Google Guava cache data)
Face key point prediction and normalization
Floating point memory storage problem
ES6 from entry to master # 10: Set the Set data type
Shell script programming - operation
深度卷积生成对抗网络
I quit my job after cutting the brothers, and turned to do a small clerk
化妆品行业分销渠道管理系统加强企业渠道管控能力,赋能化妆品渠道数字化升级
Google Play policy update | in July 2022
随机推荐
Mysql数据库及表的建立
PHP 读取/导出 CSV文件
Linux安装MySQL(超详细)
Floating point memory storage problem
Instant Messaging - New Software that Changes Social and Work Status
【微服务】(十六)—— 分布式事务Seata
Impala时间函数总结
韦伯首批照片引发论文竞速大战:晚13秒即错失首发,科研党纷纷肝得起飞
【 LeetCode 】 121. The best time to buy stocks
Comparator和Comparable
你真的了解Redis的持久化机制吗?
NDK 系列(5):JNI 从入门到实践,爆肝万字详解!
qt vs2015中无法打开源文件“QtWidgets”的解决方案
See you in shenzhen!Cloud native to accelerate the application building special: see cloud native FinOps, SRE, high-performance computing scenario best practices
Jmeter实现多用户测试
【 LeetCode 】 350. The intersection of two arrays. II
【LeetCode】350. 两个数组的交集 II
cmake(14):利用set_property命令设置全局属性
人脸关键点预测以及归一化
联想集团宣布在科创板上市!杨元庆:进一步释放联想的价值!