概述

Redis 提供了2种不同的持久化方式,分别为RDB和AOF

  • RDB能够定时地对数据进行快照存储,因为是定时的,所以服务宕机时存在丢失数据的风险
  • AOF能够记录每一次的写操作,当服务重启的时候会重新执行这些命令来恢复数据,恢复完整度高,但是比较耗时
  • Redis服务启动时,根据配置的持久化方式来决定加载RDB或者AOF恢复数据。如果2种持久化都开启,则优先加载AOF

RDB

RDB 相关配置

# save <seconds> <changes>
# 在900秒内保存1次、300秒内保存10次、60秒内保存10000次,这些条件符合其中一个就会触发RDB快照保存
save 900 1
save 300 10
save 60 10000# RDB快照存储失败时,是否停止接收新的写入操作
stop-writes-on-bgsave-error yes# 是否开启RDS快照文件的压缩存储(不开启会导致dump.rdb文件过大)
rdbcompression yes# 对RDB格式进行校验,但是在加载或保存RDB文件时有10%的性能损耗
rdbchecksum yes# RDB快照文件名
dbfilename dump.rdb# 存放RDB、AOF文件的目录
dir /usr/local/redis-5.0.8/data

RDB 详解

  • 如果Redis服务是正常退出,会自动保存最新数据到rdb,然后再退出服务
  • 如果Redis服务是异常中断,例如kill命令直接终止,则不会触发RDB快照保存
  • 在保存RDB文件时,父进程会fork出一个子进程来处理,然后父进程不需要再做其他IO操作。
  • 在恢复大的数据集时,RDB会比AOF更快

AOF

AOF 相关配置

# 是否开启AOF持久化
appendonly no
# AOF持久化文件名
appendfilename "appendonly.aof"# 持久化策略。
# always:每次写入数据分别触发持久化,并完成磁盘同步
# everysec:每秒持久化一次,并完成磁盘同步(推荐)
# no:将数据交给操作系统处理,更快,也更不安全
appendfsync everysec# 当AOF文件正在rewrite时,是否停止appendfsync操作
# no:不停止,也就是追加操作照常进行
# yes:停止,不进行追加操作,而只是将其放在缓冲区
no-appendfsync-on-rewrite no# AOF文件增大一定的比例后(percentage),自动触发重写机制bgrewriteaof
# 只有当文件超过一定的大小(min-size),bgrewriteaof才会执行,避免文件很小的时候一直反复的rewrite
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

AOF 文件重写机制

AOF的机制是不断地将写命令追加到文件末尾,随着日积月累文件会变得越来越大,这时就需要一个重写机制来处理。
例如:你对1个数值进行INCR递增100次,AOF记录了100次INCR命令,实际上只需要1条SET命令就能保存最新的值了。
为了处理这种情况,AOF重写机制(bgrewriteaof)会创建1个新的AOF文件,包含了重建当前数据所需要的最少命令,创建完毕后直接替换掉原文件。

AOF 文件损坏处理

服务器宕机时可能导致AOF文件损坏,此时在Redis重启时不会加载这个AOF文件。这种情况下,可以通过以下方式处理:

  1. 复制一份当前的AOF文件,作为备份
  2. 使用Redis自带的修复程序进行处理:redis-check-aof -fix
  3. (可选)使用 diff -u 对比修复后的 AOF 文件和原始 AOF 文件的备份,查看两个文件之间的不同之处
  4. 重启Redis服务,等待AOF文件加载以及数据恢复

RDB切换到AOF

假设Redis当前使用的是RDB,并且有了一定的数据量,这时候想启用AOF时,应该怎么操作呢?

方法一

直接修改redis.conf文件,把appendonly改成yes,然后重启redis。

注意:这时原数据将被全部清空
注意:这时原数据将被全部清空
注意:这时原数据将被全部清空

方法二

通过redis-cli连接redis,执行命令进行设置,这时将直接启用aof,并将当前的数据写入到appendonly.aof文件。

CONFIG SET appendonly yes

注意:redis.conf记得同步设置appendonly yes,否则下次重启aof不会启用

Redis RDB、AOF持久化详解相关推荐

  1. 转-Redis AOF 持久化详解

    转自: https://juejin.cn/post/6844903902991630349 Redis AOF 持久化详解 Redis 是一种内存数据库,将数据保存在内存中,读写效率要比传统的将数据 ...

  2. Redis AOF 持久化详解

    来自公众号:程序员历小冰 Redis 是一种内存数据库,将数据保存在内存中,读写效率要比传统的将数据保存在磁盘上的数据库要快很多.但是一旦进程退出,Redis 的数据就会丢失. 为了解决这个问题,Re ...

  3. Redis RDB与AOF持久化详解

    为什么要有RDB和AOF? Redis数据库基于内存储存数据,而内存的缺点就是当服务器挂掉了,数据就没了. 所以Redis需要持久化来恢复数据,而持久化的方式就有RDB和AOF Redis 持久化 R ...

  4. Redis持久化——AOF机制详解

    在运行情况下,Redis 以数据结构的形式将数据维持在内存中,为了让这些数据在 Redis 重启之后仍然可用,需要将数据写入持久存储 持久化是指将数据写入持久存储,例如固态磁盘(SSD) Redis ...

  5. redis stream持久化_Beetlex.Redis之Stream功能详解

    原标题:Beetlex.Redis之Stream功能详解 有一段时间没有写文章,techempower的测试规则评分竟然发生了变化,只能忘着补充一下占比权重最多的数据更新示例了和深入设计一下组件模块化 ...

  6. nosql----redis持久化详解

    nosql----redis持久化详解 redis持久化的意义在于故障恢复 redis的数据是储存在内存的,假如redis突然down掉,又或者服务器主机突然断电故障.这时候内存里面的数据就会全部丢失 ...

  7. Redis设计与实现详解二:Redis数据库实现

    Redis设计与实现详解一:数据结构与对象 Redis设计与实现详解三:多机功能实现 Redis设计与实现详解四:其他单机功能 数据库 服务器中的数据库 Redis服务器将所有数据库都保存在服务器状态 ...

  8. Redis基础及原理详解

    Redis基础及原理详解 前言:以下是最近学习redis的一些笔记总结,文中如有不当的地方欢迎批评指正,重在记录与学习,笔芯~~ Nosql概述 演进历史 单机mysql Memcached(缓存)+ ...

  9. Redis数据库教程——系统详解学习Redis全过程

    Redis数据库教程--系统详解学习Redis全过程 Redis快速入门:Key-Value存储系统简介 Key-Value存储系统:     Key-Value Store是当下比较流行的话题,尤其 ...

最新文章

  1. 推荐算法炼丹笔记:阿里序列化推荐算法ComiRec
  2. html的技术标准网站,HTML5标准最新技术预览
  3. C语言程序返回值为int的时候,不同值代表不同的意义
  4. 深入了解java虚拟机(JVM) 第四章 对象的创建
  5. 动态图制作软件设计(二)
  6. Docker 安装常用软件记录
  7. python创建二维空列表_python创建与遍历List二维列表的方法
  8. 人世之厄人性之恶——陈应松《母亲》读后
  9. 在Windows 10中打开PowerShell的9种方法
  10. $wnd and $doc Calling native JavaScript with JSNI
  11. 临终关怀?抑或一切照旧?PR咋又更新了?
  12. ORACLE公司的历史
  13. mysql数据库表中插入中文字段时报错 ‘\xCD\xF5\xBB\xAA‘
  14. 新版标准日本语初级_第四课
  15. 一点点读懂Thremal(二)
  16. 详解变分自编码器VAE(Variational Auto-Encoder)
  17. 勾股定理(计算)C++
  18. Linux运维学习笔记之三十一:监控利器Nagios实战
  19. 数据库MySQL-查询语句
  20. 数美科技直播短视频行业未成年人保护解决方案:全方位护航未成年人视听娱乐安全

热门文章

  1. WIN7如何禁止IE浏览器自动升级
  2. 为什么精准营销难谈精准?
  3. 锻炼能降低13种癌症风险
  4. abap-在table control中实现查找功能
  5. 生产订单成本的计划、控制和结算
  6. 如何编写多client多公司的增强
  7. 今天才知道什么是柏拉图式的爱情
  8. 多个硬件体验如一,华为终端分布式技术会重构IoT生态吗?
  9. mysql存储过程1267_mysql存储过程一例
  10. Java 怎么 get char_Java KeyCharacterMap.getDeadChar方法代码示例