zoukankan      html  css  js  c++  java
  • redis持久化之RDP和AOF

    先来解释一下

    RDP和AOF都是redis持久化模式 

    说原理之前先说下 save 900 1 的含义  代表900 秒内如果至少有 1 个 key 的值变化,则保存(想了解redis.conf配置含义 https://www.cnblogs.com/pqchao/p/6558688.html

    RDP原理:save 1 1为例 12:00的数据为100条 100条会存储到RDP文件中 12:01的数据为200条时候  200条会存储到RDP文件中 (或者说从内存存到磁盘中)会造成丢失很多数据

    AOF原理:

    1 redis本来有100w条 都会记录到AOF文件中 但是因为redis中有lru清除缓存 导致了AOF中的数据相关的指令日志就比原redis内存中存的数据多 导致AOF很大

    2 等AOF文件达到一定量时 redis会重新创建一个AOF文件 吧redis中最新的数据指令日志写到AOF中

    3 这样AOF中的数据指令日志都是最新的

    以下配置都是在redis.conf中

    RDP:redis默认开启的持久化模式,  save 1 1是我自己测试的 , 如果想关闭RDP 可以 把 save “” 放开 ,把下面的注释掉就可以了。

     AOF:默认不开启   

      配置  

    appendonly yes
    appendfsync always
    appendfsync everysec
    appendfsync no

      aof持久化策略的配置
      no表示不执行fsync,由操作系统保证数据同步到磁盘,速度最快。
      always表示每次写入都执行fsync,以保证数据同步到磁盘。


      everysec表示每秒执行一次fsync,可能会导致丢失这1s数据

    no-appendfsync-on-rewrite no

       在aof重写或者写入rdb文件的时候,会执行大量IO,此时对于everysec和always的aof模式来说,
       执行fsync会造成阻塞过长时间,no-appendfsync-on-rewrite字段设置为默认设置为no。
       如果对延迟要求很高的应用,这个字段可以设置为yes,否则还是设置为no,这样对持久化特性来说这是更安全的选择。
       设置为yes表示rewrite期间对新写操作不fsync,暂时存在内存中,等rewrite完成后再写入,默认为no,建议yes。
       Linux的默认fsync策略是30秒。可能丢失30秒数据。

    auto-aof-rewrite-percentage 100

      aof自动重写配置,当目前aof文件大小超过上一次重写的aof文件大小的百分之多少进行重写,
      即当aof文件增长到一定大小的时候,Redis能够调用bgrewriteaof对日志文件进行重写。
      当前AOF文件大小是上次日志重写得到AOF文件大小的二倍(设置为100)时,自动启动新的日志重写过程。

    auto-aof-rewrite-min-size 64mb

      设置允许重写的最小aof文件大小,避免了达到约定百分比但尺寸仍然很小的情况还要重写

    aof-load-truncated yes

      aof文件可能在尾部是不完整的,当redis启动的时候,aof文件的数据被载入内存。
      重启可能发生在redis所在的主机操作系统宕机后,尤其在ext4文件系统没有加上data=ordered选项,出现这种现象
      redis宕机或者异常终止不会造成尾部不完整现象,可以选择让redis退出,或者导入尽可能多的数据。
      如果选择的是yes,当截断的aof文件被导入的时候,会自动发布一个log给客户端然后load。
      如果是no,用户必须手动redis-check-aof修复AOF文件才可以。

    aof配置结合自己的项目情况配置

    一般rpd和aof都会开启 这样来确保数据万无一失

  • 相关阅读:
    spring aop简单理解
    动态代理
    静态代理
    spring的i o c简单回顾
    java注解的概念理解
    Eclipse中配置Tomcat
    java中Optional和Stream流的部分操作
    java中的stream的Map收集器操作
    java中的二进制运算简单理解
    Class.forName和ClassLoader.loadClass区别(转)
  • 原文地址:https://www.cnblogs.com/krlin/p/12322253.html
Copyright © 2011-2022 走看看