redis的持久化

持久化

持久化是一个相对的概念,通常概念上的持久化是指将存储于内存中的数据保存到硬盘或其他存储设备中,这些存储设备也有几率丢失数据,但它们比基于内存的存储要持久得多,这就提示了我们持久化的两种理解

软件应用层面关闭应用软件,下一次打开上次的数据还在
系统层面关机或重启电脑,再打开时上次的数据还在

redis的持久化就是要在电脑关机后还能保存数据,而redis也提供了方法:

  • RDB持久化会每隔一段时间对数据进行快照并压缩
  • AOF持久化会在每次增删改操作后对命令进行记录
RDBAOF
默认状态默认开启默认关闭
同步机制在指定时间内发生了指定数量的增删改后同步每秒同步或每次命令后同步
存储内容数据命令
优点存储的数据文件会进行压缩,文件体积较小AOF类似增量备份,每次备份会直接追加到aof文件最后,时间上会快很多
存储内容是具体的值,数据恢复更快,安全性更高AOF在每秒或每次命令后都会进行备份,因此最多只会丢失1秒的数据
当aof文件较大,redis会进行重写,只保留最小的命令集合,就是只保留反复修改的数据的最后一次修改命令
缺点RDB类似mariadb的全局备份,一般设定为5分钟备份一次,也就是说,可能会丢失一部分数据当数据并发量较大时,aof的效率会减慢
当数据量较大,RDB备份会耗很多时间由于aof备份的是命令,当恢复时redis要重新运行一遍所有命令,恢复速度较慢

RDB

优劣

优点

  • rdb文件自动压缩,其中保存了一个时间节点的所有数据,所以它非常适合用作数据集的备份,就类似于mysql的全局备份
  • 作为一个被压缩过的单一文件,rdb比较容易上传到远端数据库,非常适合用于灾难恢复
  • rdb在进行备份时只需要父进程fork出一个子进程,之后交给子进程来完成备份,因此对redis的影响降到最低

当Redis备份一个新的dump.rdb文件时,redis调用forks生成子进程,子进程将数据集写入到一个临时的rdb文件里,当子进程完成写入后,redis就将旧的rdb文件删除,将新的rdb文件保存下来
缺点

  • 当redis意外宕机,rdb并不能还原所有数据,生产环境中一般5分钟进行一次rdb备份,也就意味着可能会丢失4分59秒的数据
  • 当数据集较大,fork就会十分耗时,并且可能会影响数据库性能

rdb配置

rdb备份包括主动保存和被动保存,主动保存只需redis-cli save,被动保存需要满足设置的规则

vim /etc/redis.conf
##############################################################################################################
save 900 1							在900秒内,只要执行了一次增删改
save 300 10							在300秒内,只要执行了10次增删改
save 60 10000						在60秒内,只要执行了10000次增删改

事实上rdb的数据不可靠性还与这种机制有关,大家可以思考一下,当我在300秒内添加了20条数据,这就触发了备份机制,此时kill进程模拟redis意外宕机,再次启动redis后还剩几条数据,是10条还是20条?
答案是10条,另外那10条数据就拜拜了。感兴趣的童鞋可以做个实验验证一下(不要用shutdown,因为在开启rdb状态下shutdown本身也会执行数据主动保存)

save和bgsave

save和bgsave是redis提供的两种保存方式

  • save直接调用rdbsave函数,直到保存完成为止都会阻塞redis主进程,在此期间服务器不能处理客户端的任何请求
  • bgsave会fork出一个子进程,子进程负责调用rdbsave,而父进程可以继续处理客户端的请求。

AOF

优劣

优点

  • aof会在每秒或者每次操作后进行一次备份,也就是说最多丢失1秒的数据
  • aof类似增量备份,每次备份只是追加一个命令到aof文件上,速度上要快很多
  • 当aof文件太大时,redis会对aof文件进行重写,只保留最小的命令集合,最小命令集合是指用最少的命令恢复当前数据集
  • aof文件简单易读,也可以被修改

缺点

  • 由于aof保存的是命令集合,因此当需要恢复数据库时,redis其实是在把所有命令重新执行一次,速度是很慢的

aof配置

vim /etc/redis.conf
##############################################################################################################
appendonly yes
#aof同步方式
appendfsync always							每当有命令执行都会写入aof
appendfsync everysec						每秒同步一次,此选项为默认
appendfsync no								从不同步

rdb与aof切换

生产环境中一般不轻易重启服务,事实上较高版本的redis支持不重启切换rdb与aof

redis-cli config set appendonly yes

aof就开启了,redis会阻塞直到初始 AOF 文件创建完成为止, 之后redis会继续处理命令请求, 并开始将写入命令追加到aof文件末尾。
别忘了修改配置文件,不然哪天redis重启了aof就关闭了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值