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都会开启 这样来确保数据万无一失

posted @ 2020-02-17 16:12  sysogg  阅读(1050)  评论(0编辑  收藏  举报