Redis快照持久化

Redis持久化

  整体上来说,redis持久化有两种方式,快照持久化和AOF,在项目中我们可以根据实际情况选择合适的持久化方式,也可以不用持久化,这关键看我们的redis在项目中扮演了什么样的角色。那么我将分别介绍这两种不同的持久化方式,本文首先介绍快照持久化方式。

快照持久化

  快照持久化,顾名思义,就是通过拍摄快照的方式来实现数据的持久化,redis可以在某个时间点对内存中的数据创建一个副本文件,副本文件中的数据在redis重启时会被自动加载,我们也可以将副本文件拷贝到其他地方一样可以使用。

如何配置快照持久化

redis中的快照持久化默认是开启的,redis.conf中相关的配置主要有如下几项:

save 900 1
save 300 10
save 60 10000

stop-writes-on-bgsave-error yes

rdbcompression yes

dbfilename dump.rdb

dir ./  # 一般我们会改成这个redis的安装根目录下:dir /usr/local/redis-5.0.4

注意:上面dir的配置,如果要是使用redis搭建集群的话要使用默认的:dir ./

  • 前面三个save相关的选项表示备份的频率,分别表示:
    900秒内至少一个键被更改则进行快照;
    300秒内至少10个键被更改则进行快照;
    60秒内至少10000个键被更改则进行快照;
  • stop-writes-on-bgsave-error yes表示在快照创建出错后,是否继续执行写命令;
  • rdbcompression yes则表示是否对快照文件进行压缩;
  • dbfilename dump.rdb表示生成的快照文件的名字;
  • dir则表示生成的快照文件的位置,

在Redis中,快照持久化默认就是开启的。我们可以通过如下步骤验证快照持久化的效果:

1、进入redis安装目录,如果有dump.rdb文件,先将之删除。如下:

在这里插入图片描述

2、启动redis,随便向redis中存储几个数据,然后关闭redis并退出,如下:

[root@zmf redis]# redis-server redis.conf 
1555:C 09 May 2019 02:43:53.714 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1555:C 09 May 2019 02:43:53.714 # Redis version=5.0.4, bits=64, commit=00000000, modified=0, pid=1555, just started
1555:C 09 May 2019 02:43:53.714 # Configuration loaded
[root@zmf redis]# redis-cli
127.0.0.1:6379> set name zmf
OK
127.0.0.1:6379> hmset user name zmf age 18 
OK
127.0.0.1:6379> SHUTDOWN
not connected> exit

3、退出来后,我们发现刚刚删掉的dump.rdb文件又回来了,这就是生成的备份文件。

在这里插入图片描述

4、此时我们再次启动redis并进入,发现刚刚存储的数据都还在,这是因为redis在启动时加载了dump.rdb中的数据。

[root@zmf redis]# redis-server redis.conf 
1562:C 09 May 2019 02:49:24.195 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1562:C 09 May 2019 02:49:24.195 # Redis version=5.0.4, bits=64, commit=00000000, modified=0, pid=1562, just started
1562:C 09 May 2019 02:49:24.195 # Configuration loaded
[root@zmf redis]# redis-cli
127.0.0.1:6379> keys *
1) "user"
2) "name"
127.0.0.1:6379>

5、好了,关闭redis并退出,将redis目录下的dump.rdb文件删除。

在这里插入图片描述

6、再次启动redis并进入到控制台,所有数据都不存在了。

[root@zmf redis]# rm -rf dump.rdb 
[root@zmf redis]# redis-server redis.conf 
1570:C 09 May 2019 02:52:58.331 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1570:C 09 May 2019 02:52:58.331 # Redis version=5.0.4, bits=64, commit=00000000, modified=0, pid=1570, just started
1570:C 09 May 2019 02:52:58.331 # Configuration loaded
[root@zmf redis]# redis-cli
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379>

快照持久化操作流程

  通过上面的介绍,相信童鞋们对快照持久化都有了一个大致认知了,至于快照持久化到底是怎么执行的?持久化的时机是什么?下面,我们来讲解一下。

1、在redis运行过程中,我们可以向redis发送一条save命令来创建一个快照,save是一个阻塞命令,redis在接收到save命令之后,开始执行备份操作之后,在备份操作执行完毕之前,将不再处理其他请求,其他请求将被挂起,因此这个命令我们用的不多。save命令执行如下:

127.0.0.1:6379> SAVE
OK

2、在redis运行过程中,我们也可以发送一条bgsave命令来创建一个快照,不同于save命令,bgsave命令会fork一个子进程,然后这个子进程负责执行将快照写入硬盘,而父进程则继续处理客户端发来的请求,这样就不会导致客户端命令阻塞了,如下:

127.0.0.1:6379>BGSAVE
Background saving started

3、如果我们在redis.conf中配置了如下选项:

save 900 1
save 300 10
save 60 10000

那么当条件满足时,比如900秒内有一个key被操作了,那么redis就会自动触发bgsave命令进行备份。我们可以根据实际需要在redis.conf中配置多个这种触发规则。

4、还有一种情况也会触发save命令,那就是我们执行shutdown命令时,当我们用shutdown命令关闭redis时,此时也会执行一个save命令进行备份操作,并在备份操作完成后将服务器关闭。

5、还有一种情况也会触发bgsave命令,就是在主动备份的时候。当从机连接上主机后,会发送一条sync命令来开始一次复制操作,此时主机会开始一次bgsave操作,并在bgsave操作结束后向从机发送快照数据实现数据同步。

优缺点

  优点

  RDB文件是一个很简洁的单文件,它保存了某个时间点的Redis数据,很适合用于做备份。你可以设定一个时间点对RDB文件进行归档,这样就能在需要的时候很轻易的把数据恢复到不同的版本。
  RDB很适合用于灾备。单文件很方便就能传输到远程的服务器上。
  RDB的性能很好,需要进行持久化时,主进程会fork一个子进程出来,然后把持久化的工作交给子进程,自己不会有相关的I/O操作。
  比起AOF,在数据量比较大的情况下,RDB的启动速度更快。

  缺点

  RDB容易造成数据的丢失。假设每5分钟保存一次快照,如果Redis因为某些原因不能正常工作,那么从上次产生快照到Redis出现问题这段时间的数据就会丢失了。
  RDB使用fork()产生子进程进行数据的持久化,如果数据比较大的话可能就会花费点时间,造成Redis停止服务几毫秒。如果数据量很大且CPU性能不是很好的时候,停止服务的时间甚至会到1秒。

如何禁用快照持久化

 1.在redis.conf配置文件中注释掉所有的save配置
 2.在最后一条save配置追加吃命令

save ""
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值