| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> Redis持久化机制 -> 正文阅读 |
|
[大数据]Redis持久化机制 |
Redis为什么数据要持久化?Redis是内存数据库,如果数据不进行持久化,一旦Redis服务器重启数据会全部丢失。 注意:如果Redis只做缓存,你也可以不使用任何持久化方式。 什么是Redis数据持久化把数据存储到硬盘中,当服务器开启的时候再读入到内存中去,这就是redis数据的持久化。
注意:修改的redis的配置文件,要重启redis才能生效。 RDB(默认机制)在一段时间内,检测key的变化情况,然后持久化某一个时刻数据(快照)【对性能影响低,推荐使用】
每次触发save,就会把当前时刻的数据记录到dump.rdb文件(二进制文件,内容看不懂)中。 关闭rdb机制只需要将所有的save保存策略注释掉即可。 rdb机制触发的时机
持久化执行过程????????Redis会fork一个子进程进行持久化,先将数据写到临时文件(dump.rdb)中,待持久化过程结束,再用这个临时文件替换上次持久化好的文件。整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能。 数据恢复只需要把dump.rdb放在redis的配置文件指定的目录下即可,redis启动时,会自动检查dump.rdb文件,恢复数据。 生产环境我们会对dump.rdb文件进行备份。 rdb文件名称
rdb文件位置
?./:代表当前目录下 优点
缺点
AOF以日志的方式把所有写的操作都记录到文件中(无限追加写入) 恢复数据时,把这个文件中所有的写操作再执行一遍。 开启aof(默认不开启)
持久化策略
文件名称
aof文件分析如执行命令set zhuge 666,aof文件里会记录如下数据:
redis-check-aof工具如果aof文件有错误,redis是启动不起来的,我需要修改这个aof文件 redis给我们提供了一个工具redis-check-aof,执行指令来修复aof文件
AOF重写AOF文件里可能有很多没用指令,所以AOF会定期根据内存的最新数据生成aof文件。 例如,执行了如下几条命令:
aof文件中就会有1 - 5的所有记录,但重写后AOF文件里变成只有5
如下两个配置可以控制AOF自动重写频率
当然AOF还可以手动重写,进入redis客户端执行命令bgrewriteaof重写AOF。 注意,AOF重写redis会fork出一个子进程去做(与bgsave命令类似),不会对redis正常命令处理有太多影响。 RDB和AOF的对比aof文件大小远远大于rdb,修复速度也比rdb慢,aof运行效率比rdb慢 对于大规模恢复数据,且对数据恢复的完整性不是非常敏感,那RDB要比AOF更加高效。
生产环境可以都启用,rdb和aof文件都会生成,redis启动时如果既有rdb文件又有aof文件则优先选择aof文件恢复数据,因为aof一般来说数据更全一点。 混合持久化【推荐】???????Redis 4.0 提供混合持久化方式,权衡rdb 和 aof,使用这种方式建议关闭rdb(注释配置文件的所有save) ????????重启Redis时,我们很少使用RDB来恢复内存状态,因为会丢失大量数据。我们通常使用AOF 日志重放,但是重放 AOF 日志性能相对 RDB来说要慢很多,这样在Redis数据很大的情况下,启动需要花费很长的时间。 Redis 4.0 为了解决这个问题,提供一个新的持久化机制 - 混合持久化。 通过如下配置可以开启混合持久化。
????????如果开启了混合持久化,AOF在重写时,将重写这一刻之前的内存做RDB快照处理,并且将RDB快照内容(二进制)写入到新的aof文件,写入过程中,如果有新的命令,则会以aof的方式追加到新的aof文件某末尾。新的文件一开始不叫appendonly.aof,等到重写完新的AOF文件才会进行改名,覆盖原有的AOF文件,完成新旧两个AOF文件的替换。 总结:就是把原来aof重写机制修改,其他不变,触发重写机制时把rdb快照数据存到aof文件中,当有新的数据加入,以aof的方式追加到文件末尾(aof格式),每秒记录一次(看aof的配置)编辑。 线上Redis持久化策略一般如何设置如果对性能要求较高,在Master最好不要做持久化,可以在某个Slave开启AOF备份数据, 策略设置为每秒同步一次即可。(我们一般作为缓存使用,丢一秒数据无所谓) |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 10:47:19- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |