Redis持久化策略

    Redis有两种持久化方式:快照(snapshotting,或者叫Redis DataBase,RDB)和只追加文件(append-only,AOF)。两种方式可以单独使用,也可以同时使用。

1.RDB模式

    RDB:将某时刻所有数据都写入到硬盘里,存储为.rdb快照文件,新的快照文件生成之后会替换旧的快照文件。用户可以将快照复制到其他服务器。若在快照创建完成之前出现故障,Redis将丢失已有的最新快照之后写入的所有数据。

快照创建方式:

  • BGSAVE命令:Redis会创建子进程,子进程负责将快照写入硬盘,父进程继续处理命令请求。fork创建子进程时会阻塞。

  • SAVE命令:使用SAVE命令,Redis在快照创建成功之前不会响应任何其他命令。SAVE不常用,一般只在没有内存执行BGSAVE时才会使用,或系统可以等待持久化完成时使用。

    SAVE 60 10000 表示从最近一次快照创建之后开始,满足60秒内有10000次写入,Redis会自动触发BGSAVE命令。多个SAVE时,满足任意一个SAVE设置的条件都可以触发BGSAVE。

  • 当Redis接收到SHUTDOWN命令(关闭服务器)时,或收到标准TERM信号时,会执行SAVE命令阻塞所有客户端,在SAVE执行完毕后关闭服务器。

  • 当一台Redis服务器向另一台Redis服务器发送SYNC命令(复制操作)时,如果主服务器目前没有在执行BGSAVE,或者主服务器不是刚刚执行完BGSAVE,那么主服务器会执行BGSAVE命令。

    tips 1:如果使用快照持久化,最好让开发服务器的配置尽量贴近生产服务器,有助于判断快照生成是否过于频繁(浪费资源)或稀少(有数据丢失隐患)。

    tips 2:随着Redis占用内存越来越多,BGSAVE创建子进程耗费的时间会越来越多。真实硬件环境下通常Redis进程每占用1GB内存,创建子进程所需的时间就要增加10~20毫秒。需要考虑创建子进程造成的停顿。

2.AOF模式

    AOF模式会在执行写命令时,将被执行的写命令追加到AOF文件末尾,利用AOF恢复文件,就是执行一遍AOF文件中记录的命令。设置appendonly yes开启AOF。

通过appendfsync指定同步策略,appendfsync选项及同步频率如下:

  • always:每个Redis写命令都同步写入硬盘,会严重降低Redis的速度;

  • everysec:每秒执行一次同步,显式地将多个写命令同步到硬盘;

  • no:让操作系统决定何时进行同步;

    tips 1:appendfsync always 每个写命令都要写入硬盘,每次只写入一个命令,Redis处理命令速度与硬盘性能有关,机械硬盘每秒大约处理200个写命令,固态硬盘每秒处理几万个命令。对于固态硬盘,这种策略可能出现写入放大问题,影响硬盘寿命。

    tips 2:appendfsync everysec每秒对AOF文件进行同步,Redis性能和不使用任何持久化特性时相差无几。这种策略下,即使Redis出现系统崩溃,最多丢失1秒之内产生的数据;此外,硬盘忙于写入操作时,Redis会放慢速度适应硬盘写入速度。

    tips 3:appendfsync no,由系统决定何时对AOF文件进行同步。这种策略一般不会对Redis性能产生影响,但系统崩溃时会丢失不定数量的数据。若硬盘写入速度不够快,当缓冲区被写满时,Redis写入操作将被阻塞,导致Redis处理命令请求的速度变慢。所以一般不推荐使用这种策略。

    AOF缺点:随着Redis运行,AOF文件体积会越来越大,严重时占满整个磁盘;Redis重启后需要执行AOF文件记录的命令来还原数据,如果AOF文件体积过大,那么还原操作时间会很长。

    使用BGREWRITEAOF命令会移除AOF文件中冗余的命令,重写AOF文件,从而压缩AOF文件减小文件体积。

    BGREWRITEAOF同BGSAVE类似,通过子进程对AOF文件进行重写,子进程的性能消耗和内存占用问题同BGSAVE。如果不控制AOF文件的大小,AOF文件会比快照文件大几倍,AOF文件体积可达数十GB,在创建新的AOF文件并删除旧AOF文件时,可能导致系统挂起数秒。

AOF选项同步选项:

·auto-aof-rewrite-percentage:当前的AOF文件大小超过上一次重写的AOF文件大小的百分之多少时会再次进行重写,如果之前没有重写过,则以启动时的AOF大小为依据;

·auto-aof-rewrite-min-size:限制了允许重写的最小AOF文件,通常在AOF文件很小的时候即使其中有些冗余命令也可是可以忽略的;

例如:

        auto-aof-rewrite-percentage 100

        auto-aof-rewrite-min-size 64mb

    表示当AOF文件大小是上次rewrite后大小的一倍且文件大于64M时触发。实际AOF文件大小一般以G为单位。

    tips 4:最好将AOF和快照文件备份都进行备份,并保存到多个不同服务器,尽量避免数据丢失事故。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

专治八阿哥的孟老师

您的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值