redis的持久化(RDB和AOF方式)

转载 2016年05月31日 17:20:49
redis支持两种持久化的方式,可以单独使用或者结合起来使用
第一种:RDB方式(redis默认的持久化方式)
第二种:AOF方式

一、RDB
rdb方式的持久化是通过快照完成的,当符合一定条件时redis会自动将内存中的所有数据执行快照操作并存储到硬盘上。默认存储在redis根目录的dump.rdb文件中。(文件名在配置文件中dbfilename)
redis进行快照的时机(在配置文件redis.conf中)
save 900 1:表示900秒内至少一个键被更改则进行快照。
save 300 10
save 60 10000

redis自动实现快照的过程
1:redis使用fork函数复制一份当前进程的副本(子进程)
2:父进程继续接收并处理客户端发来的命令,而子进程开始将内存中的数据写入硬盘中的临时文件
3:当子进程写入完所有数据后会用该临时文件替换旧的RDB文件,至此,一次快照操作完成。  
注意:redis在进行快照的过程中不会修改RDB文件,只有快照结束后才会将旧的文件替换成新的,也就是说任何时候RDB文件都是完整的。 这就使得我们可以通过定时备份RDB文件来实现redis数据库的备份, RDB文件是经过压缩的二进制文件,占用的空间会小于内存中的数据,更加利于传输。

手动执行save或者bgsave命令让redis执行快照。
两个命令的区别在于,save是由主进程进行快照操作,会阻塞其它请求。bgsave是由redis执行fork函数复制出一个子进程来进行快照操作。
文件修复:redis-check-dump

rdb的优缺点
优点:由于存储的有数据快照文件,恢复数据很方便。
缺点:会丢失最后一次快照以后更改的所有数据。

二、AOF
 aof方式的持久化是通过日志文件的方式。默认情况下redis没有开启aof,可以通过参数appendonly参数开启。
 appendonly yes
 aof文件的保存位置和rdb文件的位置相同,都是dir参数设置的,默认的文件名是appendonly.aof,可以通过      appendfilename参数修改
 appendfilename appendonly.aof
 redis写命令同步的时机
 a ppendfsync always 每次都会执行
 appendfsync everysec 默认 每秒执行一次同步操作(推荐,默认)
 appendfsync no不主动进行同步,由操作系统来做,30秒一次
 aof日志文件重写
 auto-aof-rewrite-percentage 100(当目前aof文件大小超过上一次重写时的aof文件大小的百分之多少时会再次进行重写,如果之前没有重写,则以启动时的aof文件大小为依据)
 auto-aof-rewrite-min-size 64mb
 手动执行bgrewriteaof进行重写

重写的过程只和内存中的数据有关,和之前的aof文件无关。 所谓的“重写”其实是一个有歧义的词语, 实际上, AOF 重写并不需要对原有的 AOF 文件进行任何写入和读取, 它针对的是数据库中键的当前值。
 文件修复:redis-check-aof
 动态切换redis持久方式,从 RDB 切换到 AOF(支持Redis 2.2及以上)
 CONFIG SET appendonly yes
 CONFIG SET save ""(可选)

注意:当redis启动时,如果rdb持久化和aof持久化都打开了,那么程序会优先使用aof方式来恢复数据集,因为aof方式所保存的数据通常是最完整的。如果aof文件丢失了,则启动之后数据库内容为空。

注意:如果想把正在运行的redis数据库,从RDB切换到AOF,建议先使用动态切换方式,再修改配置文件,重启数据库。(不能直接修改配置文件,重启数据库,否则数据库中数据就为空了。)

redis的 rdb 和 aof 持久化的区别

redis的 rdb 和 aof 持久化的区别 url: http://ptc.35.com/?p=275 aof,rdb是两种 redis持久化的机制。用于crash后,redis的恢复。 r...
  • jackpk
  • jackpk
  • 2014年06月11日 17:24
  • 21715

Redis持久化,RDB和AOF

Redis强大的功能很大部分是由于他把数据缓存在内存中,为了使Redis在重启的时候,数据不丢失,就需要已某种方式把数据持久化到磁盘中。Redis持久化的方式有俩种,RDB和AOF。RDB:快照方式,...
  • yingxiake
  • yingxiake
  • 2016年06月14日 08:19
  • 2789

关于redis 基于RDB数据迁移注意事项

RDB是redis常用持久化方式,通过执行bgsave命令,会在指定目录下生成rdb文件,默认名称为:dump.rdb dbfilename "dump.rdb" dir "/opt/app/redi...
  • GOGOICE
  • GOGOICE
  • 2016年11月21日 16:22
  • 2189

Redis持久化,RDB和AOF

Redis强大的功能很大部分是由于他把数据缓存在内存中,为了使Redis在重启的时候,数据不丢失,就需要已某种方式把数据持久化到磁盘中。Redis持久化的方式有俩种,RDB和AOF。RDB:快照方式,...
  • yingxiake
  • yingxiake
  • 2016年06月14日 08:19
  • 2789

Redis持久化存储(AOF与RDB两种模式)

cache-only即只做为“缓存”服务,不持久数据,数据在服务终止后将消失,此模式下也将不存在“数据恢复”的手段,是一种安全性低/效率高/容易扩展的方式; persistence即为内存中的数据...
  • canot
  • canot
  • 2016年10月21日 20:39
  • 9565

redis的持久化方式RDB和AOF的区别

1、前言 最近在项目中使用到Redis做缓存,方便多个业务进程之间共享数据。由于Redis的数据都存放在内存中,如果没有配置持久化,redis重启后数据就全丢失了,于是需要开启redis的持久化功...
  • m0_38110132
  • m0_38110132
  • 2017年08月08日 14:44
  • 360

redis持久化策略RDB和AOF

Redis 持久化: redis 提供了多种不同级别的持久化方式:一种是RDB,另一种是AOF. RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time s...
  • oanqoanq
  • oanqoanq
  • 2016年03月27日 16:55
  • 1014

redis的 rdb 和 aof 持久化的区别

redis的 rdb 和 aof 持久化的区别 url: http://ptc.35.com/?p=275 aof,rdb是两种 redis持久化的机制。用于crash后,redis的恢复。 r...
  • jackpk
  • jackpk
  • 2014年06月11日 17:24
  • 21715

redis的持久化方式 RDB和AOF

RDB是Snapshot快照存储,半持久化模式 按周期策将数据保持在磁盘(save来定义周期),借助fork命令的copy on write机制。 生成快照时,当前进程会fork一个子进程,然后再子进...
  • weiwenjuan0923
  • weiwenjuan0923
  • 2016年10月21日 20:42
  • 282

Redis持久化-RDB与AOF

Redis持久化(Persistence)      Redis提供了不同持久化范围的选项:  RDB持久化以指定的时间间隔执行数据集的即时点(point-in-time)快照。AOF持久化在...
  • huwei2003
  • huwei2003
  • 2015年06月17日 14:03
  • 3521
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:redis的持久化(RDB和AOF方式)
举报原因:
原因补充:

(最多只允许输入30个字)