Redis快照持久化

redis的基础知识咱们已经准备的差很少了,接下来两篇文章,我想和你们聊聊redis持久化这个话题。html

本文是Redis系列的第八篇文章,了解前面的文章有助于更好的理解本文:java


1.Linux上安装Redis
2.Redis中的五种数据类型简介
3.Redis字符串(STRING)介绍
4.Redis字符串(STRING)中BIT相关命令
5.Redis列表与集合
6.Redis散列与有序集合
7.Redis中的发布订阅和事务  redis


redis持久化

总体上来讲,redis持久化有两种方式,快照持久化和AOF,在项目中咱们能够根据实际状况选择合适的持久化方式,也能够不用持久化,这关键看咱们的redis在项目中扮演了什么样的角色。那么我将分别用两篇文章来介绍这两种不一样的持久化方式,本文咱们先来看看第一种方式。服务器

快照持久化

快照持久化,顾名思义,就是经过拍摄快照的方式实现数据的持久化,redis能够在某个时间点上对内存中的数据建立一个副本文件,副本文件中的数据在redis重启时会被自动加载,咱们也能够将副本文件拷贝到其余地方同样能够使用。微信

如何配置快照持久化

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

save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
dbfilename dump.rdb
dir ./

前面三个save相关的选项表示备份的频率,分别表示900秒内至少一个键被更改则进行快照,300秒内至少10个键被更改则进行快照,60秒内至少10000个键被更改则进行快照,stop-writes-on-bgsave-error表示在快照建立出错后,是否继续执行写命令,rdbcompression则表示是否对快照文件进行压缩,dbfilename表示生成的快照文件的名字,dir则表示生成的快照文件的位置,在redis中,快照持久化默认就是开启的。咱们能够经过以下步骤验证快照持久化的效果:.net

1.进入redis安装目录,若是有dump.rdb文件,先将之删除。以下:code

![p299]()server

2.启动redis,随便向redis中存储几个数据,而后关闭redis并退出,以下:htm

[root@localhost redis-4.0.8]# redis-server redis.conf
[root@localhost redis-4.0.8]# redis-cli
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> set k2 v2
OK
127.0.0.1:6379> SHUTDOWN
not connected> exit

3.退出来后,咱们发现刚刚删掉的dump.rdb文件又回来了,这就是生成的备份文件。
4.此时再次启动redis并进入,发现刚刚存储的数据都还在,这是由于redis在启动时加载了dump.rdb中的数据。好了,关闭redis并退出。
5.将redis目录下的dump.rdb文件删除。
6.再次启动redis并进入到控制台,全部的数据都不存在了。

快照持久化操做流程

经过上面的介绍,小伙伴们对快照持久化都有一个大体的认识了,那么这个东西究竟是怎么运行的?持久化的时机是什么?咱们来仔细扒一扒。

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就会自动触发bgsava命令进行备份。咱们能够根据实际需求在redis.conf中配置多个这种触发规则。

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

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

快照持久化的缺点

快照持久化有一些缺点,好比save命令会发生阻塞,bgsave虽然不会发生阻塞,可是fork一个子进程又要耗费资源,在一些极端状况下,fork子进程的时间甚至超过数据备份的时间。按期的持久化也会让咱们存在数据丢失的风险,最坏的状况咱们可能丢失掉最近一次备份到当下的数据,具体丢失多久的数据,要看咱们项目的承受能力,咱们能够根据项目的承受能力配饰save参数。

OK,快照持久化咱们就介绍这么多,更多资料小伙伴们能够参考官方文档http://www.redis.net.cn/tutorial/3501.html。小伙伴在看官方文档时,有什么问题欢迎留言讨论。    

更多资料请关注公众号:

 

本文分享自微信公众号 - 江南一点雨(a_javaboy)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索