什么是数据持久化?

我们知道Redis是基于内存的非关系型数据库,对数据的增删改查操作都直接在内存中进行,再加上Redis不用维护数据之间的“关系”,导致它性能很高,速度很快。

但是基于内存有一个问题是:一旦机器断电,内存中的数据会丢失。

数据丢失是很严重的问题,所以Redis是支持数据持久化的。

数据持久化:将内存中的数据写入到磁盘,数据永久保存。

Redis的持久化机制

Redis支持两种持久化机制:RDB和AOF,4.0版本以后还加入了混合持久化机制。

RDB持久化

RDB全称:Redis DataBase。

RDB是Redis默认的持久化机制,在指定的时间间隔内,进行了指定次数的写操作,Redis就会触发RDB持久化,RDB持久化的是数据的二进制文件,节省空间。

Redis会fork一个和主进程一模一样的子进程,子进程将内存中的所有数据先写入到一个临时文件中,持久化结束以后,将这个临时文件替换正式的dump.rdb文件,整个持久化的过程中主进程不进行任何磁盘IO操作,这就确保了Redis极高的性能。

持久化文件存放在哪里?
redis.conf文件中的dir配置的目录 + dbfilename配置的文件名。

RDB触发时机

  • 在指定的时间间隔内,执行指定次数的写操作。
  • 手动执行save、bgsave时。
  • 执行FlushAll命令时,数据是空的,没有意义。
  • shutdown时,如果没有开启AOF就会触发。
  • 主从复制时。

save和bgsave

  • save
    阻塞当前Redis服务,直到持久化完成,期间所有请求都会被阻塞,线上一般不使用。

  • bgsave
    Redis服务不受影响,fork一个子进程去异步的持久化,将内存数据写到到临时文件,持久化完成后替换dump.rdb文件。

RDB的优缺点

优点

  • 性能高
  • RDB文件占用空间小
  • 数据恢复很快

缺点

  • 数据完整性和一致性要求不高,可能丢失数据。
  • 备份时占用内存,fork的子进程会让内存突然飙升。

AOF持久化

AOF全称:Append Only File。

AOF持久化在Redis中默认是关闭的,需要手动开启,AOF的出现是为了弥补RDB的不足。

AOF通过追加日志的方式来做持久化,将涉及到数据增删改的命令以日志的方式追加到aof文件中,Redis服务重启时执行一遍aof中的命令来完成数据的恢复。

如何开启AOF

修改配置文件,重启服务。

# 开启AOF
appendonly yes# aof文件名
appendfilename "appendonly.aof"# AOF触发时机:
# always 每次写操作都写入磁盘,效率低。
# everysec 每秒写入一次磁盘。
# no Redis不主动写磁盘,由操作系统来决定调用,线上不推荐使用。
# appendfsync always
appendfsync everysec
# appendfsync no

AOF重写机制

因为AOF文件存储的是命令,就导致它比较庞大,比rdb文件要大很多,Redis需要对其进行“瘦身”。

AOF重写就是对AOF文件进行“瘦身”,采用的方案是:将多条写操作优化为一条写操作,记录最终结果,而无需记录中间每一步的操作记录,重写之后AOF文件会小很多。

如下例子:

rpush a 1
rpush a 2
rpush a 3重写后:rpush a 1 2 3 (3条命令变成1条)

配置AOF重写策略

# 当AOF文件大小的增长率大于该配置项时触发重写。
auto-aof-rewrite-percentage 100# 当AOF文件大小大于此配置时,触发重写。线上环境要调大该值。
auto-aof-rewrite-min-size 64mb

手动触发AOF重写

BGREWRITEAOF

混合持久化机制

Redis4.0版本推出了混合持久化机制,5.0之前默认关闭,5.0版本已经默认开启了。

修改配置文件开启

aof-use-rdb-preamble yes

混合持久化是通过BGREWRITEAOF来实现的,未开启混合持久化时,AOF重写的方式是将多条指令优化为一条,开启混合持久化后,AOF前半段是RDB格式的二进制数据全量文件,后半段以日志命令的方式追加,AOF文件也采用混合存储。

数据恢复

Redis重启后,需要对数据进行恢复,将RDB/AOF中持久化的数据重新加载到内存,步骤大致如下图所示:

Redis数据持久化机制及数据恢复相关推荐

  1. Redis数据持久化机制AOF原理分析一---转

    http://blog.csdn.net/acceptedxukai/article/details/18136903 http://blog.csdn.net/acceptedxukai/artic ...

  2. Redis数据持久化机制AOF原理分析二

    本文所引用的源码全部来自Redis2.8.2版本. Redis AOF数据持久化机制的实现相关代码是redis.c, redis.h, aof.c, bio.c, rio.c, config.c 在阅 ...

  3. 执行一次怎么会写入两次数据_Java进阶知识:一文详解缓存Redis的持久化机制,新手看完也会用

    Redis 的数据全部在内存里,如果突然宕机,数据就会全部丢失,因此必须有一种机制来保证 Redis 的数据不会因为故障而丢失,这种机制就是 Redis 的持久化机制. Redis有两种持久化的方式: ...

  4. Redis数据持久化、数据备份、数据的故障恢复

    1.redis持久化的意义----redis故障恢复 在实际的生产环境中,很可能会遇到redis突然挂掉的情况,比如redis的进程死掉了.电缆被施工队挖了(支付宝例子)等等,总之一定会遇到各种奇葩的 ...

  5. redis rdb aof区别_理解Redis的持久化机制:RDB和AOF

    什么是Redis持久化? Redis作为一个键值对内存数据库(NoSQL),数据都存储在内存当中,在处理客户端请求时,所有操作都在内存当中进行,如下所示: 这样做有什么问题呢? 注 意 文末有:362 ...

  6. 面试官:能说说Redis的持久化机制吗?

    我们先来看这么一段面试场景-- 面试官:你们项目缓存技术用到了什么缓存技术? 小帅:Redis 面试官:那么问一下,Redis缓存技术用到的持久化机制是哪一种机制? 小帅:AOF 面试官:好吧,回去等 ...

  7. Redis面试 - Redis的持久化机制

    Redis面试 - Redis的持久化机制 面试题 redis 的持久化有哪几种方式?不同的持久化机制都有什么优缺点?持久化机制具体底层是如何实现的? 面试官心理分析 redis 如果仅仅只是将数据缓 ...

  8. redis rdb aof区别_10分钟彻底理解Redis的持久化机制:RDB和AOF

    点击上方"Java知音",选择"置顶公众号" 技术文章第一时间送达! 作者:张君鸿 juejin.im/post/5d09a9ff51882577eb133aa ...

  9. redis的持久化机制详解

    redis的持久化机制 因为Redis的数据都储存在内存中,当进程退出时,所有数据都将丢失.为了保证数据安全,Redis支持RDB和AOF两种持久化机制有效避免数据丢失问题.RDB可以看作在某一时刻R ...

最新文章

  1. c语言实现数码管显示qq号,各位大神,如何用C语言实现在数码管上实现1234同时亮...
  2. RMI、Hessian、Burlap、Httpinvoker、WebService的比较
  3. 修改默认的pip版本为对应python2.7
  4. CF1406E:Deleting Numbers(构造、根号分块)
  5. 四川大学计算机专业贵州分数线,四川大学2016年在贵州省高考各专业录取分数线...
  6. 【Julia】Julia v1.5.1 更改Pkg存放位置
  7. 网页设计图片向上浮动_果冻公开课第六课:5分钟理解浮动布局
  8. itunes备份包括哪些内容_建筑工程的招标包括哪些内容?
  9. Exynos4412开发板更换开机logo图片
  10. php搭建后台 xampp_你还在用wordpress?|搭建独一无二个人网络日志发布平台
  11. B/S还是C/S? ERP技术的新方向(转)
  12. ISO9000标准简介
  13. uci数据集汇总及翻译
  14. TAGE预测器 “A case for (partially) TAgged GEometric history length branch prediction”
  15. 刻在我心底的名字吉他谱-凡凡吉他教室编制
  16. Linux下安装压力测试工具hey、参数介绍、实例
  17. webpack打包工具不会用,那是因为你没看过这篇
  18. 如何用 CSS 制作动画圆环图形图标
  19. python发送邮件群发_Python发邮件脚本,Python调用163邮箱SMTP服务实现邮件群发
  20. linux的root用户默认密码,Linux下root初始密码设置方法

热门文章

  1. Android之屏幕适配方案
  2. linux服务器杀进程,linux杀死进程命令[通俗易懂]
  3. 微信电脑版 == 摸鱼神器?
  4. 绝地求生8月7号服务器维修吗,2019绝地求生8月7日更新官方公告 吃鸡8月7日更新了什么内容?...
  5. 爱单纯女孩十个必要条件
  6. 分类与预测算法评价标准
  7. python中值_Python中值,python,中位数
  8. mesh和wifi中继的区别_一文读懂:小米Wi-Fi6路由器上的Mesh到底是什么?
  9. docker离线安装使用yum
  10. 腾讯毛华:智能交互,AI助力下的新生态