Redis持久化

一、简介

Redis是一种基于内存的非关系型数据库,它的所有数据都保存在内存中。因而会存在重启机器数据丢失情况。为避免这类情况发生,Redis支持数据持久化功能。通过配置,开启持久化,将数据保存到硬盘上。

Redis提供了一系列不同的持久化选项:

  • RDB持久性以指定的间隔执行数据集的实时快照。
  • AOF持久性记录服务器接收到的每一次写入操作,这些操作将在服务器启动时再次播放,重构原始数据集。命令以只附加的方式使用与Redis协议本身相同的格式记录。Redis能够在日志变得太大时重写它的背景。
  • 如果您愿意,您可以完全禁用持久化,如果您希望只要服务器运行,您的数据就会存在。
  • 可以在同一个实例中合并AOF和RDB。注意,在这种情况下,当Redis重新启动时,AOF文件将被用于重构原始数据集,因为它保证是最完整的。

二、RDB

RDB中文名为快照-内存,它的持久化实现原理就是通过开启RDB[默认方案]并配置时间周期定时将数据从内存写入硬盘。

Redis提供如下几种方式来对数据进行快照:

在redis.conf中配置

执行save或bgsave

执行flushall

执行主从复制

下图将描述Redis如何实现持久化:

RDB的持久化是一个全量保存数据过程,若数据量较大,则保存时间就会有点长。此时,当在快照的时候进行写操作,那么势必出现数据不一致情况。因而Redis采取的是Copy-on-Write方案,来保证在快照中的数据是不会有变化的。该方案中快照数据是fork一个子进程来处理内存中数据写入硬盘。图中可以看到子进程是先保存一个临时的RDB文件,这样好处是当服务端崩溃时,只有上次快照中有新增或变化的数据异常,绝大部分数据仍然是正常的。Redis存储的数据默认保存在与redis-conf同一级目录,名称为dump.rdb。如果想要将数据放在自定义的路径下、自定义名称就修改如下配置即可。

# Note that you must specify a directory here, not a file name.dir./

# The filename where to dump the DBdbfilename dump.rdb修改快照周期,一行一个配置,各配置之间是或的关系:

# 周期性执行条件的设置格式为save 

# 默认配置save 900 1 //表示900秒中至少1个建被修改就保存save 300 10 //表示300秒中至少10个建被修改就保存save 60 10000# 以下设置方式为关闭RDB快照功能,默认是注释掉的save""

三、AOF

为满足Redis异常崩溃导致少量数据丢失,或快照方式存储数据时间较长、占用CPU资源较高,Redis提供增量更新数据的AOF持久化方案。

AOF持久化,其原理是通过日志的形式记录服务器处理的每一个写、删除、更新操作,这样可以方便查看。当RDB与AOF都开启时,将使用AOF。下图简要描述AOF执行过程:

Redis在处理一条命令时,并不立即调用write写AOF文件,只是将数据写入到AOF buffer(server.aof_buf)中。调用write和命令处理是分开的,Redis只在每次进入epoll_wait之前做write操作。如何配置AOF:

# 将no改为yes即可开启appendonlyno

# AOF记录日志名称,保存在bin下appendfilename"appendonly.aof"

# 同步策略,有everysec、always、no,默认是everysec每秒同步;

# always表示有写操作就执行调用fsync(Linux为调用fdatasync);

# no表示写入后不会有fsync调用,由操作系统自动调度刷磁盘,性能是最好的appendfsync everysec

四、总结

如何选择持久化方案,取决于实际业务场景的需要,适合才是最重要的。RDB方案适合做冷备份,恢复数据时候数据比AOF快,而且快照时对写入服务影响小,但是会存在丢失数据,而且当数据量大的时候会存在服务短暂停止。AOF方案适合满足缓存一致性,而且当出现数据误删,可以采取将日志文件中误操作步骤删除就可以恢复数据。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值