Redis 之一:持久化

Redis databases And  Append-only file
RDB:在指定的时间间隔内将内存中的数据集快照写入磁盘,对数据进行快照存储(Snapshot快照)。恢复时将快照文件直接读到内存中。

    redis会单独创建(fork)一个子进程进行持久化,会先将数据写入到一个临时文件中,待持久化结束之后,用临时文件替换上一次持久化好的文件。整个过程中,主进程不进行IO操作,以确保性能,如需进行大规模数据恢复,且对数据完整性不敏感,那RDB更高效。

    优点:恢复速度快。缺点:redis突然down掉,最后一次持久化的数据可能丢失。全量保存,当数据量大时,比较消耗性能。

    部分配置:
         save ""     禁用rdb备份策略
        保存数据快照的频率(满足下面任何一个条件就触发产生一次快照)
        save 900 1        900s内如果有1条是写入命令
        save 300 10      300s内有10条写入
        save 60 10000      60s 内有10000 个keys发生变化
        dir var/lib/redis/6379/persistent/        rdb文件所在目录(备份时临时文件原持久化文件都放在这里,当备份结束用临时文件替换原文件)
        stop-writes-on-bgsave-error yes   当备份进程(fork的子进程)出错时,主进程就停止接受新的写入操作,是为了保护持久化的数据一致性问题。
        dbfilename dump.rdb   文件名称
        rdbcompression yes    进行数据镜像备份时,是否压缩RDB文件
        rdbchecksum yes       对RBD文件进行CRC64校验,利于保证文件正确性和完整性。读写RDB文件时会损失大约10%性能。

AOF:以日志的形式记录每一个写操作,只做增量追加不改写文件(rdb是全量替换),当服务器启动时会读取日志文件重新构建数据。

    优点:备份机制更稳健,丢失数据概率低。缺点:恢复速度慢,每次写操作都同步,会造成性能压力。比rdb占用更多磁盘空间。

    部分配置:
        appendonly no    启用aof备份策略
        appendfilename "appendonly.aof" AOF文件名
        appendfsync everysec 对aof文件进行同步的频率。
            always:    把每个写命令都立即同步到aof,很慢,但是很安全
            everysec:    每秒同步一次,是折中方案 
            no:        redis不处理交给OS来处理,非常快,但是也最不安全
        aof-load-truncated yes   如果该配置启用,在加载时发现aof尾部不正确时,会向客户端写入一个log,但是会继续执行,如果设置为 no ,发现错误就会停止,必须修复后才能重新加载。

        当Aof log增长超过指定比例时,重写log file
        no-appendfsync-on-rewrite no      在重写aof命令期间,是否对aof新记录的append暂缓使用文件同步策略,主要考虑磁盘IO开支和请求阻塞时间。默认为no,表示"不暂缓",新的aof记录仍然会被立即同步
        auto-aof-rewrite-percentage 100   设置为0表示不自动重写Aof 日志,重写是为了使aof体积保持最小,而确保保存最完整的数据。
        auto-aof-rewrite-min-size 64mb      触发aof rewrite的最小文件尺寸
    
    Linux内核参数:与aof重写相关的一个linux内核参数即是 overcommit_memory。(重写是后台重写,会分配子进程).默认值为0,建议设置为1,以保证子进程内存能够分配成功(即使用copyOnWrite内存分配策略,在没有set命令时会和主进程使用同一份内存),并且不会判断当前内存是否够用.
    
    重写的意义:Redis会不断地将被执行的写命令记录到AOF文件中,AOF文件的体积会越来越大,极端情况下可能会撑满硬盘;
    另外一个问题是,Redis在重启之后需要通过重新执行AOF文件记录的所有写命令来还原数据集,所以如果AOF文件的体积非常大,那么还原操作执行的时间就可能非常长。
    --可以向Redis发送BGREWRITEAOF命令,BGREWRITEAOF命令会通过移除AOF文件中的冗余命令来重写AOF文件,使得AOF文件的体积变得尽可能的小。
    Redis默认行为的意思是当AOF的体积大于64M,并且比上一次重写之后的体积大了至少一倍(100%)的时候,Redis将执行BGREWRITEAOF命令。

注:如果同时用RDB和AOF两种持久化机制,在redis重启时,会用AOF来重新构建数据,因AOF中的数据更加完整
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值