Redis的两种备份方式:RDB和AOF

在 Redis 中存在两种方式的备份:一种是快照恢复(RDB),通过快照(snapshotting)实现的,它是备份当前瞬间 Redis 在内存中的数据记录。

另一种是只追加文件(Append-Only File,AOF),其作用就是当 Redis 执行写命令后,在一定的条件下将执行过的写命令依次保存在 Redis 的文件中,将来就可以依次执行那些保存的命令恢复 Redis 的数据了。

RDB备份

对于快照备份而言,如果当前 Redis 的数据量大,备份可能造成 Redis 卡顿,但是恢复重启是比较快速的;对于 AOF 备份而言,它只是追加写入命令,所以备份一般不会造成 Redis 卡顿,但是恢复重启要执行更多的命令,备份文件可能也很大,使用者使用的时候要注意。

在 Redis 中允许使用其中的一种、同时使用两种,或者两种都不用,所以具体使用何种方式进行备份和持久化是用户可以通过配置决定的。对于Redis而言,它的默认配置为:

################################## SNAPSHOTTING###################################
......
save 900 1
save 300 10
save 60 10000
......
stop-writes-on-bgsave-error yes
......
rdbcompression yes
......
dbfilename dump.rdb
############################## APPEND ONLY MODE ###############################
......
appendonly no
......
appendfilename "appendonly.aof"
......
#appendfsync always
appendfsync everysec
# appendfsync no......
......
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
......
aof-load-truncated yes
......

对于快照模式的备份而言,它的配置项如下:

save 900 1
save 300 10
save 60 10000

这 3 个配置项的含义分别为:

900 秒执行 1 个写命令时,启用快照备份。
当 300 秒执行 10 个写命令时,启用快照备份。
当 60 秒内执行 10000 个写命令时,启用快照备份。

Redis 执行 save 命令的时候,将禁止写入命令。

stop-writes-on-bgsave-error yes

先谈谈 bgsave 命令,它是一个异步保存命令,也就是系统将启动另外一条进程,把 Redis 的数据保存到对应的数据文件中。它和 save 命令最大的不同是它不会阻塞客户端的写入,也就是在执行 bgsave 的时候,允许客户端继续读/写 Redis。

在默认情况下,如果 Redis 执行 bgsave 失败后,Redis 将停止接受写操作,这样以一种强硬的方式让用户知道数据不能正确的持久化到磁盘,否则就会没人注意到灾难的发生,如果后台保存进程重新启动工作了,Redis 也将自动允许写操作。然而如果安装了靠谱的监控,可能不希望 Redis 这样做,那么你可以将其修改为 no。

rdbcompression yes

这个命令意思是是否对 rbd 文件进行检验,如果是将对 rdb 文件检验。从 dbfilename 的配置可以知道,rdb 文件实际是 Redis 持久化的数据文件。

dbfilename dump.rdb

它是数据文件。当采用快照模式备份(持久化)时,Redis 将使用它保存数据,将来可以使用它恢复数据。

appendonly no

AOF备份

如果 appendonly 配置为 no,则不启用 AOF 方式进行备份。如果 appendonly 配置为 yes,则以 AOF 方式备份 Redis 数据,那么此时 Redis 会按照配置,在特定的时候执行追加命令,用以备份数据。

appendfilename "appendonly.aof"

这里定义追加的写入文件为 appendonly.aof,采用 AOF 追加文件备份的时候命令都会写到这里。

#appendfsync always
appendfsync everysec
# appendfsync no......

AOF 文件和 Redis 命令是同步频率的,假设配置为 always,其含义为当 Redis 执行命令的时候,则同时同步到 AOF 文件,这样会使得 Redis 同步刷新 AOF 文件,造成缓慢。而采用 evarysec 则代表每秒同步一次命令到 AOF 文件。

采用 no 的时候,则由客户端调用命令执行备份,Redis 本身不备份文件。对于采用 always 配置的时候,每次命令都会持久化,它的好处在于安全,坏处在于每次都持久化性能较差。

采用 evarysec 则每秒同步,安全性不如 always,备份可能会丢失 1 秒以内的命令,但是隐患也不大,安全度尚可,性能可以得到保障。采用 no,则性能有所保障,但是由于失去备份,所以安全性比较差。建议采用默认配置 everysec,这样在保证性能的同时,也在一定程度上保证了安全性。

no-appendfsync-on-rewrite no

它指定是否在后台 AOF 文件 rewrite(重写)期间调用 fsync,默认为 no,表示要调用 fsync(无论后台是否有子进程在刷盘)。Redis 在后台写 RDB 文件或重写 AOF 文件期间会存在大量磁盘 I/O,此时,在某些 Linux 系统中,调用 fsync 可能会阻塞。

auto-aof-rewrite-percentage 100

它指定 Redis 重写 AOF 文件的条件,默认为 100,表示与上次 rewrite 的 AOF 文件大小相比,当前 AOF 文件增长量超过上次 AOF 文件大小的 100% 时,就会触发 background rewrite。若配置为 0,则会禁用自动 rewrite。

auto-aof-rewrite-min-size 64mb

它指定触发 rewrite 的AOF文件大小。若AOF文件小于该值,即使当前文件的增量比例达到 auto-aof-rewrite-percentage 的配置值,也不会触发自动 rewrite。即这两个配置项同时满足时,才会触发rewrite。

aof-load-truncated yes

Redis 在恢复时会忽略最后一条可能存在问题的指令,默认为 yes。即在 AOF 写入时,可能存在指令写错的问题(突然断电、写了一半),这种情况下 yes 会 log 并继续,而 no 会直接恢复失败。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/564055.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C 创建链表

C语言创建链表 完整代码 #include<stdio.h> #include<stdlib.h> #include<malloc.h> typedef struct LNode{int data;struct LNode *next; }LNode,*LinkList;LinkList CreateList(int n); void print(LinkList h); int main() {LinkList HeadNULL…

刀片服务器显示连接线,通过浏览器对刀片服务器进行管理

为了通过浏览器的方式对刀片服务器进行管理&#xff0c;第一步是通过cat5类线连接管理模块的以太网口&#xff0c;或者通过直连线进行连接。在浏览器中敲入管理模块的固定ip 地址(192.168.70.125)进行连接&#xff0c;如果存在dhcp服务&#xff0c;需要在dhcp服务器端查看管理模…

Redis内存回收策略

Redis 也会因为内存不足而产生错误&#xff0c;也可能因为回收过久而导致系统长期的停顿&#xff0c;因此掌握执行回收策略十分有必要。在 Redis 的配置文件中&#xff0c;当 Redis 的内存达到规定的最大值时&#xff0c;允许配置 6 种策略中的一种进行淘汰键值&#xff0c;并且…

visual报表服务器项目,为 Visual Studio ALM 创建报表服务器项目

为 Visual Studio ALM 创建报表服务器项目06/09/2015本文内容通过使用 SQL Server 报表设计器来创建报表可以跟踪团队的进度。 在可以使这些报表基于 Visual Studio Team Foundation Server (TFS) 中的数据之前&#xff0c;必须首先在 Visual Studio 中创建一个报表服务器项目。…

Redis悲观锁、乐观锁和调用Lua脚本的优缺点

悲观锁使用了数据库的锁机制&#xff0c;可以消除数据不一致性&#xff0c;对于开发者而言会十分简单&#xff0c;但是&#xff0c;使用悲观锁后&#xff0c;数据库的性能有所下降&#xff0c;因为大量的线程都会被阻塞&#xff0c;而且需要有大量的恢复过程&#xff0c;需要进…

从RedisTemplate中获得Jedis实例

很多时候&#xff0c;我们也许需要使用一些更为高级的缓存服务器的 API&#xff0c;如 Redis 的流水线、事务和 Lua 语言等&#xff0c;所以也许会使用到 RedisTemplate 本身。 首先&#xff0c;定义 RedisTemplateService 的接口&#xff0c;代码如下所示。 package com.ser…

Spring整合Redis详解

用注解驱动的方式来使用 Redis。和数据库事务一样&#xff0c;Spring 提供了缓存的管理器和相关的注解来支持类似于 Redis 这样的键值对缓存。 准备测试环境 首先&#xff0c;定义一个简单的角色 POJO&#xff0c;代码如下所示。 package com.pojo; import java.io.Serializ…

Redis和数据库的结合

使用 Redis 可以优化性能&#xff0c;但是存在 Redis 的数据和数据库同步的问题&#xff0c;这是我们需要关注的问题。假设两个业务逻辑都是在操作数据库的同一条记录&#xff0c;而 Redis 和数据库不一致。 Redis 和数据库不一致 在图中&#xff0c;T1 时刻以键 key1 保存数…

C 字符串排序

使用C语言对字符串进行排序 编写程序对字符串进行排序输出&#xff0c;用户根据提示输入三个字符串&#xff0c;程序根据26个英文字母的顺序进行排序输出。 完整代码 #include<stdio.h> #include<stdlib.h> #include <string.h>void swap(char*str1,char*…

plsql连接报ORA-12537

客户新电脑装上了plsql&#xff0c;连接数据库时报如上错误&#xff0c;但是别的电脑都可以正常连接&#xff0c;先检查了下TNS配置&#xff0c;发现没问题&#xff0c;数据库连接数也足够&#xff0c;百思不得其解 后面去数据库服务器上查看了监听日志文件&#xff0c;连接报错…

C 将任意八进制数转化为十进制

C语言实现八进制数到十进制的转化 使用C语言将一个八进制数转化为十进制数&#xff0c;用户根据提示输入一个任意的八进制数&#xff0c;程序将八进制数转化为十进制数并进行输出显示。 完整代码 #include<stdio.h> #include<stdlib.h> int main() {int n0,i0;c…

C 字符串连结

C语言实现对两个字符串进行连接 用户根据提示分别输如两个任意的字符串&#xff0c;两个字符串之间要用回车分开&#xff0c;程序将这两个字符串进行连接并输出显示。 完整代码 #include <stdio.h> #include<stdlib.h> #include<string.h>char* strconnec…

C 时间函数

C获取当前时间并进行输出 使用C语言的时间函数获取当前的时间并输出显示在控制台。 完整代码 #include <stdio.h> #include <time.h>int main () {time_t rawtime;struct tm * timeinfo;time ( &rawtime );timeinfo localtime ( &rawtime );printf ( &…

C 猜谜游戏

C语言实现猜谜游戏 利用C语言的判断循环&#xff0c;以及获取值实现猜谜游戏&#xff0c;用户根据提示输入任意数据&#xff0c;程序会获取你输入的数据并判断大小给出提示&#xff0c;用户再次输入数据经过若干次循环判断使用户猜出正确的答案。 完整代码 #include <std…

pycharm创建我的第一个项目

使用pycharm创建我的第一个项目 1 . Create New Project 2 . pycharm设置项目的保存位置&#xff08;创建的是一个空项目&#xff09;。 3 . 添加python文件&#xff0c;右击项目文件夹 --> New --> python File。 4 . 设置创建的python文件名称&#xff0c;点击下方…

Pycharm 字体大小及背景颜色的设置

设置Pycharm 的字体大小及背景颜色 Pycharm设置字体的大小及风格 选择File --> setting --> Editor --> Font,我们可以看到如下图所示界面&#xff0c;我们就可以根据自己的喜好随意调整字体的大小&#xff0c;字体的样式风格&#xff0c;文字行间距&#xff0c;设置…

pycharm设置开发模板

pycharm设置开发模板 可能大家会有一些疑问&#xff0c;什么是模板&#xff1f;为什么要设置模板的呢&#xff1f;模板就是一种通用的格式&#xff0c;如果在pycharm中设置了模板&#xff0c;那么每次创建一个python文件的时候都会自动包含模板中的内容。 示例 python3 默认采…

Webstorm设置开发模板

WebStorm设置开发模板 可能大家会有一些疑问&#xff0c;什么是模板&#xff1f;为什么要设置模板的呢&#xff1f;模板就是一种通用的格式&#xff0c;如果在webstorm中设置了模板&#xff0c;那么每次创建一个javaScript文件的时候都会自动包含模板中的内容。 我们想要Webs…

Pycharm 项目运行的多种技巧

当我们在pycharm上完成我们的项目之后&#xff0c;我们应该如何运行这个项目的呢&#xff1f; 方法一&#xff1a;点击三角线绿色按钮&#xff0c;运行run&#xff08;运行程序&#xff09; 方法二&#xff1a;使用快捷键 Ctrl shift 10 &#xff0c;效果一样&#xff0c;同…

C++ 输入输出

C实现获取用户输入的数值并进行输出显示。 完整代码 #include <iostream> using namespace std;int main() { int number;cout << "输入一个整数: ";cin >> number;cout << "输入的数字为: " << number; return 0; …