zoukankan      html  css  js  c++  java
  • Redis持久化的简单介绍

    Redis的强大功能很大程度上是由于其将所有数据都存储在内存中,为了使Redis在重启后仍能保证数据不丢失,需要将数据从内存中以某种形式持久化到硬盘中。

    Redis支持两种方式的持久化,一种是RDB方式一种是AOF方式。其中,RDB是Redis的默认持久化方式

    一、RDB方式

    RDB方式是通过快照完成的,当符合一定条件时Redis会自动将内存中的所有数据进行快照并且存储到硬盘上。

    1.RDB的快照同步原理:

    1) Redis使用fork函数复制一份当前进程(父进程)的副本(子进程)
    2) 父进程继续接收并处理客户端发来的命令,而子进程开始将内存中的数据写入到硬盘中的临时文件
    3) 当子进程写入完所有数据后会用该临时文件替换旧的RDB文件
    

    2.自动同步

    进行快照的条件在配置文件中指定,有2个参数构成:时间和改动的键的个数,当在指定时间内被更改的键的个数大于指定数值时就会进行快照。
    

    默认配置如下:

    save 900 1  #900秒内如果超过1个key被修改,则发起快照保存
    save 300 10 #300秒内容如超过10个key被修改,则发起快照保存
    save 60 10000
    

    默认的rdb的文件路径是在当前目录,文件名是:dump.rdb,可以在redis.conf配置文件中修改路径和文件名,分别是dir和dbfilename。

    3.手动同步

    通过键入save/bgsave命令可以手动同步数据到文件中。建议使用bgsave命令,因为save会阻塞
    

    二、AOF方式

    1.运行原理:

    将发送到Redis服务端的每一条命令都记录下来,并且保存到硬盘中的AOF文件。
    

    AOF文件的位置和RDB文件的位置相同,都是通过dir参数设置,默认的文件名是appendonly.aof,可以通过appendfilename参数修改。

    文件写入默认情况下会先写入到系统的缓存中,系统每30秒同步一次,才是真正的写入到硬盘。如果在这30秒服务器宕机,那么数据也会丢失的,Redis可以通过配置来修改同步策略。通过fsync函数强制os写入到磁盘的时机。修改redis.conf文件:

    appendonly yes            //启用aof持久化方式
    # appendfsync always      //每次收到写命令就立即强制写入磁盘,最慢的,但是保证完全的持久化,不推荐使用
    appendfsync everysec     //每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中,推荐
    # appendfsync no    //完全依赖os,性能最好,持久化没保证
    

    2.优化命令,精简文件大小:

    键入BGREWRITEAOF命令可以重写AOF文件,使其过滤中间命令。例如:
    set test 111
    set test 222
    set test 333
    键入入BGREWRITEAOF命令后,AOF文件会删除上边前2行命令,因为test 的最终值为333,前边的命令是多余的。
    

    3.重写策略的参数设置:

    auto-aof-rewrite-percentage 100
    当前的AOF文件大小超过上一次重写时的AOF文件大小的百分之多少时会再次进行重写,如果之前没有重写过,则以启动时的AOF文件大小为依据。
    auto-aof-rewrite-min-size 64mb
    限制了允许重写的最小AOF文件大小,通常在AOF文件很小的时候即使其中有些冗余的命令也是可以忽略的。
    

    AOF优缺点

    优点:比快照方式可靠,默认每秒同步一次,意味着最多丢失一秒的数据
    缺点:相同数据集大小,AOF文件会比快照文件大
  • 相关阅读:
    BZOJ1001 BJOI2006狼抓兔子(最小割+最短路)
    BZOJ4569 SCOI2016萌萌哒(倍增+并查集)
    Luogu4782 【模板】2-SAT 问题(2-SAT)
    BZOJ3626 LNOI2014LCA(树链剖分+主席树)
    BZOJ4012 HNOI2015开店(树链剖分+主席树)
    Luogu2264 树上游戏(点分治)
    BZOJ3998 TJOI2015弦论(后缀数组+二分答案)
    BZOJ1045 HAOI2008糖果传递(贪心)
    BZOJ1124 POI2008枪战Maf(环套树+贪心)
    洛谷 P4568 [JLOI2011]飞行路线 解题报告
  • 原文地址:https://www.cnblogs.com/moonlightL/p/7364617.html
Copyright © 2011-2022 走看看