美文网首页Java互联网科技redis学习
详解Redis——持久化方案

详解Redis——持久化方案

作者: Java高级架构狮 | 来源:发表于2019-08-25 20:44 被阅读8次

    欢迎Java工程师关注简书专栏
    Java架构技术进阶
    本专栏收录各种Java相关技术,面试题,以及学习感悟,心得!

    一:前言

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

    Redis目前提供了两种方式的持久化机制[其实还有VM、DISKSTORE,但是官方不推荐]:

    • ①RDB持久化机制:将Redis在内存中的数据,定时的写入到磁盘上
    • ②AOF持久化机制:将操作日志aof文件通过追加的方式写入文件
      官网链接:https://redis.io/topics/persistence

    二: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方案适合满足缓存一致性,而且当出现数据误删,可以采取将日志文件中误操作步骤删除就可以恢复数据。

    相关文章

      网友评论

        本文标题:详解Redis——持久化方案

        本文链接:https://www.haomeiwen.com/subject/gxmkectx.html