redis随记

  redis 是一个非常高效和简洁的软件,redis 源码阅读必然要提上日程,以下仅作日常记录 :)

redis 持久化

文档:http://redisdoc.com/topic/persistence.html

  • RDB快照

    • 在默认情况下, Redis 将数据库快照保存在名字为 dump.rdb 的二进制文件中。你可以对 Redis 进行设置, 让它在“ N 秒内数据集至少有 M 个改动”这一条件被满足时, 自动保存一次数据集。你也可以通过调用 SAVE 或者 BGSAVE , 手动让 Redis 进行数据集保存操作。
    • 开启RDB配置文件参考:
    ################################ 快照  #################################  
    #  
    # Save the DB on disk:保存数据库到磁盘  
    #  
    #   save <> <更新>  
    #  
    #   如果指定的秒数和数据库写操作次数都满足了就将数据库保存。  
    #  
    #   下面是保存操作的实例:  
    #   900秒(15分钟)内至少1key值改变(则进行数据库保存--持久化)  
    #   300秒(5分钟)内至少10key值改变(则进行数据库保存--持久化)  
    #   60秒(1分钟)内至少10000key值改变(则进行数据库保存--持久化)  
    #  
    #   注释:注释掉“save”这一行配置项就可以让保存数据库功能失效。  
    #  
    #   你也可以通过增加一个只有一个空字符串的配置项(如下面的实例)来去掉前面的“save”配置。  
    #  
    #   save ""  
    
    save 900 1  
    save 300 10  
    save 60 10000  
    
    #在默认情况下,如果RDB快照持久化操作被激活(至少一个条件被激活)并且持久化操作失败,Redis则会停止接受    更新操作。  
    #这样会让用户了解到数据没有被正确的存储到磁盘上。否则没人会注意到这个问题,可能会造成灾难。  
    #  
    #如果后台存储(持久化)操作进程再次工作,Redis会自动允许更新操作。  
    #  
    #然而,如果你已经恰当的配置了对Redis服务器的监视和备份,你也许想关掉这项功能。  
    #如此一来即使后台保存操作出错,redis也仍然可以继续像平常一样工作。  
    stop-writes-on-bgsave-error yes  
    
    #是否在导出.rdb数据库文件的时候采用LZF压缩字符串和对象?  
    #默认情况下总是设置成‘yes’, 他看起来是一把双刃剑。  
    #如果你想在存储的子进程中节省一些CPU就设置成'no'  
    #但是这样如果你的kye/value是可压缩的,你的到处数据接就会很大。  
    rdbcompression yes  
    
    #从版本RDB版本5开始,一个CRC64的校验就被放在了文件末尾。  
    #这会让格式更加耐攻击,但是当存储或者加载rbd文件的时候会有一个10%左右的性能下降,  
    #所以,为了达到性能的最大化,你可以关掉这个配置项。  
    #  
    #没有校验的RDB文件会有一个0校验位,来告诉加载代码跳过校验检查。  
    rdbchecksum yes  
    
    # 导出数据库的文件名称  
    dbfilename dump.rdb  
    
    # 工作目录  
    #  
    # 导出的数据库会被写入这个目录,文件名就是上面'dbfilename'配置项指定的文件名。  
    #   
    # 只增的文件也会在这个目录创建(这句话没看明白)  
    #   
    # 注意你一定要在这个配置一个工作目录,而不是文件名称。  
    dir ./
    
  • AOF日志

    • 持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集。 AOF 文件中的命令全部以 Redis 协议的格式来保存,新命令会被追加到文件的末尾。 Redis 还可以在后台对 AOF 文件进行重写(rewrite),使得 AOF 文件的体积不会超出保存数据集状态所需的实际大小
    • 开启AOF配置文件参考:
    ############################## APPEND ONLY MODE ###############################
    # 是否开启AOF,默认关闭(no
    appendonly yes
    
    # 指定 AOF 文件名
    appendfilename appendonly.aof
    
    # Redis支持三种不同的刷写模式:
    # appendfsync always #每次收到写命令就立即强制写入磁盘,是最有保证的完全的持久化,但速度也是最慢的,一般不推荐使用。
    appendfsync everysec #每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中,是受推荐的方式。
    # appendfsync no     #完全依赖OS的写入,一般为30秒左右一次,性能最好但是持久化最没有保证,不被推荐。
    
    #在日志重写时,不进行命令追加操作,而只是将其放在缓冲区里,避免与命令的追加造成DISK IO上的冲突。
    #设置为yes表示rewrite期间对新写操作不fsync,暂时存在内存中,rewrite完成后再写入,默认为no
    no-appendfsync-on-rewrite no 
    
    #当前AOF文件大小是上次日志重写得到AOF文件大小的二倍时,自动启动新的日志重写过程。
    auto-aof-rewrite-percentage 100
    
    #当前AOF文件启动新的日志重写过程的最小值,避免刚刚启动Reids时由于文件尺寸较小导致频繁的重写。
    auto-aof-rewrite-min-size 64mb
    
  •  

原文地址:https://www.cnblogs.com/varXinYuan/p/10865472.html