redis第二章-第一课-持久化rdb和aof以及混合模式

news/2024/10/18 1:28:40/

RDB快照

1.在默认情况下, Redis 将内存数据库快照保存在名字为 dump.rdb 的二进制文件中,默认存储在redis的当前目录下,也就是和redis.conf同级目录下,可以修改位置
在这里插入图片描述
2.你可以对 Redis 进行设置, 让它在“ N 秒内数据集至少有 M 个改动”这一条件被满足时, 自动保存一次数据集。
默认是900秒保存一次,或者300秒保存10次,又或者60秒保存10000次就会持久化到dump.rdb文件中
在这里插入图片描述
3.还可以手动执行命令生成RDB快照,进入redis客户端执行命令savebgsave可以生成dump.rdb文件,每次命令执行都会将所有redis内存快照到一个新的rdb文件里,并覆盖原有rdb快照文件。

4.bgsave的写时复制(COW)机制
Redis 借助操作系统提供的写时复制技术(Copy-On-Write, COW),在生成快照的同时,依然可以正常处理写命令。简单来说,bgsave 子进程是由主线程 fork 生成的,可以共享主线程的所有内存数据。
bgsave 子进程运行后,开始读取主线程的内存数据,并把它们写入 RDB 文件。此时,如果主线程对这些数据也都是读操作,那么,主线程和 bgsave 子进程相互不影响。但是,如果主线程要修改一块数据,那
么,这块数据就会被复制一份,生成该数据的副本。然后,bgsave 子进程会把这个副本数据写入 RDB 文件,而在这个过程中,主线程仍然可以直接修改原来的数据。
在这里插入图片描述

AOF持久化

快照功能并不是非常耐久(durable): 如果 Redis 因为某些原因而造成故障停机, 那么服务器将丢失最近写入、且仍未保存到快照中的那些数据。从 1.1 版本开始, Redis 增加了一种完全耐久的持久化方
式: AOF 持久化,将修改的每一条指令记录进文件appendonly.aof中(先写入os cache,每隔一段时间fsync到磁盘)
1.需要在redis.conf文件开启aof,默认appendonly.aof日志文件是在redis.conf同级,开启是yes
在这里插入图片描述
2.appendonly.aof里面数据是一种resp协议格式数据,星号后面的数字代表命令有多少个参数,$号后面的数字代表这个参数有几个字符

注意,如果执行带过期时间的set命令,aof文件里记录的是并不是执行的原始命令,而是记录key过期的
时间戳

3.每当 Redis 执行一个改变数据集的命令时(比如 SET), 这个命令就会被追加到 AOF 文件的末尾。
这样的话, 当 Redis 重新启动时, 程序就可以通过重新执行 AOF 文件中的命令来达到重建数据集的目的。

4.可以配置 Redis 多久才将数据 fsync 到磁盘一次。
在这里插入图片描述
在这里插入图片描述
5.AOF重写
AOF文件里可能有太多没用指令,所以AOF会定期根据内存的最新数据生成aof文件
比如每次自增

 incr readcount

这样的话,aof记录每次都会存入自增
在这里插入图片描述

如下两个配置可以控制AOF自动重写频率

# auto‐aof‐rewrite‐min‐size 64mb //aof文件至少要达到64M才会自动重写,文件太小恢复速度本来就很快,重写的意义不大# auto‐aof‐rewrite‐percentage 100 //aof文件自上一次重写后文件大小增长了100%则再次触发重写

当然AOF还可以手动重写,进入redis客户端执行命令bgrewriteaof重写AOF
注意,AOF重写redis会fork出一个子进程去做(与bgsave命令类似),不会对redis正常命令处理有太多影响

在这里插入图片描述
Redis 4.0 混合持久化
重启 Redis 时,我们很少使用 RDB来恢复内存状态,因为会丢失大量数据。我们通常使用 AOF 日志重放,但是重放 AOF 日志性能相对 RDB来说要慢很多,这样在 Redis 实例很大的情况下,启动需要花费很长的时间。 Redis 4.0 为了解决这个问题,带来了一个新的持久化选项——混合持久化。

通过如下配置可以开启混合持久化(必须先开启aof):

# aof‐use‐rdb‐preamble yes

如果开启了混合持久化,AOF在重写时,不再是单纯将内存数据转换为RESP命令写入AOF文件,而是将重写这一刻之前的内存做RDB快照处理,并且将RDB快照内容和增量的AOF修改内存数据的命令存在一
起,都写入新的AOF文件,新的文件一开始不叫appendonly.aof,等到重写完新的AOF文件才会进行改名,覆盖原有的AOF文件,完成新旧两个AOF文件的替换。
于是在 Redis 重启的时候,可以先加载 RDB 的内容,然后再重放增量 AOF 日志就可以完全替代之前的AOF 全量文件重放,因此重启效率大幅得到提升。

混合持久化AOF文件结构如下
在这里插入图片描述
Redis数据备份策略:

  1. 写crontab定时调度脚本,每小时都copy一份rdb或aof的备份到一个目录中去,仅仅保留最近48小时的备份
  2. 每天都保留一份当日的数据备份到一个目录中去,可以保留最近1个月的备份
  3. 每次copy备份的时候,都把太旧的备份给删了
  4. 每天晚上将当前机器上的备份复制一份到其他机器上,以防机器损坏

http://www.ppmy.cn/news/129046.html

相关文章

10分钟学会如何通过问卷调查赚钱

想要了解更多问卷调查赚钱的信息,公众号:水煮柚子 也可以查看我的个人博客(有收款图):https://www.ckyouzi.com 现在有很多商业调查问卷的网站,注册账号并填写调查问卷,就可以获得相应的报酬。首先说明,填…

php 多维数组排序求和,PHP 多维数组排序 array_multisort()

用PHP自带array_multisort函数排序 $data array(); $data[] array(volume > 67, edition > 2); $data[] array(volume > 86, edition > 1); $data[] array(volume > 85, edition > 6); $data[] array(volume > 98, edition > 2); $data[] array(…

php 二维数组 随机排序_PHP二维数组排序的3种方法和自定义函数分享

关于排序一般我们都是通过数据库或者nosql(eg:redis)先排好序然后输出到程序里直接使用,但是有些时候我们需要通过PHP直接来对数组进行排序,而在PHP里存储数据用到最多的就是对象和数组,但处理较多的就是数组,因为有非常丰富的内置…

Redis数据库相关知识总结

Redis数据库相关知识总结 1、NoSQL概述 1.1 为什么用NoSQL 1、单机MySQL的美好年代 在90年代,一个网站的访问量一般不大,用单个数据库完全可以轻松应付! 在那个时候,更多的都是静态网页,动态交互类型的网站不多。 …

一个一线城市的IT白领的生活成本:3万/年

自从大学毕业,经济独立,就开始全面统计各种生活开支。仔细的去统计下,发现开销还是挺大的。 定理:开销越大,就意味着你每个月的收入必须越高。 三族鼎立节余族: 收入-开支 > 0月光族:收入-开支 0透…

李宁不能落下产品课

NEW 关注Tech逆向思维视频号 最新视频→【摆脱焦虑告别烦恼,家装变局让消费者更从容】 出品|盒饭财经 文|谭丽平 已经获得新生的李宁,正在体验“双刃剑”的另一面。 “第一局打的时候鞋前面不知道怎么开了,有个像钢丝还…

收藏这份新年清单,这届成年人再也不用秃头

收藏这份新年清单,这届成年人再也不用秃头 “小姨,你什么时候回来呀?想你了。”微信那头传来小侄女撒娇的声音,“我看你是想念小姨的礼物了吧!” 看看日历,嗐!行吧,就知道又到了一…

欧莱雅进博会展示口红打印机、超节水洗发产品;霍尼韦尔进博会签约顺丰集团、博腾股份 | 美通社头条...

要闻摘要:中外医院百强排行榜发布。霍尼韦尔进博会签约顺丰集团、博腾股份。西门子医疗中国与阿斯利康中国签约。辉瑞中国与多家互联网医疗平台签约。欧莱雅、爱茉莉太平洋、宝洁、拜尔斯道夫、多特瑞、飞利浦健康生活Lab亮相进博会。阿维塔科技完成总额超24亿元首轮…