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
    评论
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
以下是一些关于 Redis 持久化的可能面试问题: 1. Redis持久化有哪些方式? Redis持久化有两种方式,一种是 RDB 持久化,一种是 AOF 持久化。 2. RDB 持久化和 AOF 持久化有什么区别? RDB 持久化是将 Redis 在内存中的数据快照保存到磁盘上,而 AOF 持久化则是将 Redis 执行的每条写命令记录到磁盘上。RDB 持久化可以节约磁盘空间,但可能会丢失最近的一些数据,而 AOF 持久化可以保证数据不会丢失,但可能会占用更多的磁盘空间和写入时间。 3. Redis持久化机制是如何保证数据一致性的? Redis持久化机制可以通过在每次写操作后立即同步到磁盘,或者设置定期同步时间来保证数据一致性。 4. Redis持久化可以在运行时进行吗? 可以,Redis持久化可以在运行时进行配置和切换,例如可以在运行时从 RDB 切换到 AOF 持久化,或者从 AOF 切换到 RDB 持久化。 5. Redis持久化会对性能产生影响吗? 会,Redis持久化会增加磁盘 I/O 开销,可能会对写入性能产生一定的影响,但可以通过合理的配置来平衡性能和数据一致性。 6. Redis持久化可以与 Redis 集群一起使用吗? 可以,Redis持久化可以与 Redis 集群一起使用,但需要注意配置文件的设置和数据同步的策略。 总之,Redis持久化是保证数据一致性和可靠性的重要手段,需要根据具体的业务需求和性能要求来选择合适的持久化方式,并进行合理的配置和优化。在面试中,还需要了解 Redis 持久化的原理、机制、优缺点、与集群的结合等方面的知识。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值