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源创计划”,欢迎正在阅读的你也加入,一块儿分享。