码迷,mamicode.com
首页 > 其他好文 > 详细

redis持久化

时间:2019-03-25 20:45:37      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:系统   恢复   缓存   文件大小   物理内存   sts   应用   code   div   

redis持久化分为RDB和AOF两种方式,根据个人的理解,即一次全量的持久化和多次增量的持久化。

1、RDB方式

RDB持久化是通过快照完成的。当符合一定条件时Redis会将内存中的所有数据生成一个副本存储在硬盘上,这个过程即为“快照”。Redis通常会在以下几种情况下会对数据进行快照:

1)根据配置进行快照

技术图片

上图中的save 900 1/save 300 10/save 60 10000即是Redis的默认配置,含义是在900秒内有一个或一个以上的键值被更改则进行快照;300秒与60秒的配置类似。

2)用户执行save或bgsave命令

当执行save命令时,redis会同步进行快照操作,在执行的过程中会阻塞所有来自客户端的请求,如果数据了过大,则执行该命令后redis将会在一段时间内无响应,故不建议在生产环境执行该命令;bgsave命令与save命令不同,它在执行快照的过程中仍可以处理客户端的请求,当想知道快照是否完成,可以通过lastsave命令查询最近一次完成快照的时间。

3)执行flushall命令

当执行flushall命令时,Redis会清除数据库中的所以数据,不论是否触发了自动快照的条件。当没有定义快照条件时,执行该命令不会进行快照。

4)执行复制时

这里说的复制一般指主从数据库同步数据的过程中生成的快照,即master数据库生成快照传输给slave数据库。根据《Redis入门指南》,还有一种特殊情况,需要说明。当linux系统执行fork函数时,会采用写时复制策略,父子进程会共享同一内存数据,当父进程需要做写操作时,才会复制一份数据以保证子进程不受影响,因此,执行fork操作不会导致redis内存消耗翻倍,故需要确保linux允许应用程序申请超过可用内存(物理内存与交换分区)的空间,方法是在/etc/sysctl.conf文件中加入vm.overcommit_memory=1,然后重启系统或者执行systcl vm.overcommit_memory=1确保设置生效。

另外,RDB是经过压缩的二进制格式,占用空间较小,在CPU占用严重时,可以修改配置中的rdbcompression参数以禁用压缩功能。

 

2、AOF

redis默认不开启AOF方式的持久化,可以修改配置appendonly yes开启。AOF文件保存位置是通过配置dir参数设置的,默认文件名是appendonly.aof,可以通过修改appendfilename参数修改。因为aof会写入每一个命令操作,这会导致aof文件越来越大,当达到一定条件后,aof文件会进行重写(如删除被覆盖的操作记录),该配置可以在配置文件中配置:

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

auto-aof-rewrite-percentage 100参数的含义是:当当前aof文件超过上一次重写时的aof文件大小的100%时会重写;若之前没有冲写过,则以启动时的aof文件的大小为依据。

auto-aof-rewrite-min-size 64mb参数限制了允许重写的最小aof文件大小。

虽然每次更改数据库内容时,aof都会将命令写入硬盘,但实际上只是写入硬盘缓存中,默认每30s执行一次同步操作,若这期间linux系统故障则会导致硬盘缓存中的数据丢失,在Redis中可以通过设置参数来调整同步时机:

#appendsync always
appendsync everysec
#appendsync no

 

如果redis同时开启了RDB与AOF持久化,则Redis重启后默认以AOF恢复数据,因为AOF数据相比RDB可能会更完整些。

 

redis持久化

标签:系统   恢复   缓存   文件大小   物理内存   sts   应用   code   div   

原文地址:https://www.cnblogs.com/wsfu/p/10596149.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!