你不知道的redis三-Redis的持久化机制

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 你不知道的redis三-Redis的持久化机制

一、持久化


我们前两章已经讲了,redis是内存型的数据库,他之所以快是因为数据存储在内存。那么数据存储在内存会有什么问题呢?当然就是当服务重启或者服务器宕机内存数据就被清除,我们就无法访问之前存储的数据了。那么怎么解决这个问题呢?当然就是使用持久化技术


持久化(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化是将程序数据在持久状态和瞬时状态间转换的机制。比如JDBC就是一种持久化机制。文件IO也是一种持久化机制。


redis也是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到磁盘来保证持久化,持久化可以避免因进程退出而造成数据丢失;


redis支持两种持久化方式,RDB和AOF


二、RDB持久化方式


RDB持久化把当前进程数据生成快照(.rdb)文件保存到硬盘的过程,有手动触发自动触发


2.1 手动触发


手动触发有save和bgsave两命令


save命令:阻塞当前Redis,直到RDB持久化过程完成为止,若内存实例比较大会造成长时间阻塞,线上环境不建议用它


bgsave命令:redis进程执行fork操作创建子进程,由子线程完成持久化,阻塞时间很短(微秒级),是save的优化,在执行redis-cli shutdown关闭redis服务时,如果没有开启AOF持久化,自动执行bgsave;


bgsave流程如下:


20200820194822448.png


2.2 RDB持久化命令


命令:config set dir /usr/local  //设置rdb文件保存路径


备份:bgsave  //将dump.rdb保存到usr/local下


恢复:将dump.rdb放到redis安装目录与redis.conf同级目录,重启redis即可


2.3 恢复和异常流程演示


1,查看启动目录,没有dump文件


20200820200453567.png


2、set值

20200820200549726.png

3、执行shutdown命令关掉服务,查看目录,已经生成对应的dump文件。

20200820200650433.png

4、重启redis服务,发现数据还存在

20200820200819832.png

5、执行shutdown命令关掉服务,并把dump文件删除

20200820200915667.png

6、启动redis在进行查看,发现存储的数据已经不存在了。


20200820200946494.png

2.4 RDB持久化的优缺点


优点:

  • 压缩后的二进制文,适用于备份、全量复制,用于灾难恢复
  • 加载RDB恢复数据远快于AOF方式

缺点:

  • 无法做到实时持久化,每次都要创建子进程,频繁操作成本过高


三、AOF持久化


针对RDB不适合实时持久化,redis提供了AOF持久化方式来解决

开启方式就是在redis.conf设置:appendonly yes  (默认不开启,为no)

20200820203820593.png



默认文件名:appendfilename "appendonly.aof"


3.1 AOF持久化原理


  1. 所有的写入命令(set hset)会append追加到aof_buf缓冲区中
  2. AOF缓冲区向硬盘做sync同步
  3. 随着AOF文件越来越大,需定期对AOF文件rewrite重写,达到压缩
  4. 当redis服务重启,可load加载AOF文件进行恢复



20200820195100567.png


3.2 AOF持久化配置


配置信息 含义
appendonly yes 启用aof持久化方式
appendfsync always 每收到写命令就立即强制写入磁盘,最慢的,但是保证完全的持久化,不推荐使用
appendfsync everysec 每秒强制写入磁盘一次,性能和持久化方面做了折中,推荐
no-appendfsync-on-rewrite  yes 正在导出rdb快照的过程中,要不要停止同步aof
auto-aof-rewrite-percentage 100 aof文件大小比起上次重写时的大小,增长率100%时,重写
auto-aof-rewrite-min-size 64mb aof文件,至少超过64M时,重写


3.3 AOF持久化恢复


1. 设置appendonly yes;

2. 将appendonly.aof放到dir参数指定的目录;

3. 启动Redis,Redis会自动加载appendonly.aof文件。


四、Redis持久化加载机制顺序


如果同时都开启了AOF和RDB 两种持久化方式,那么加载顺序及流程如下

  1. 当 AOF 和 RDB 文件同时存在时,优先加载 AOF
  2. 若关闭了 AOF,加载 RDB 文件
  3. 加载 AOF/RDB 成功,redis 重启成功
  4. AOF/RDB 存在错误,redis 启动失败并打印错误信息



20200820195218541.png

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
5天前
|
监控 NoSQL 测试技术
【赵渝强老师】Redis的AOF数据持久化
Redis 是内存数据库,提供数据持久化功能,支持 RDB 和 AOF 两种方式。AOF 以日志形式记录每个写操作,支持定期重写以压缩文件。默认情况下,AOF 功能关闭,需在 `redis.conf` 中启用。通过 `info` 命令可监控 AOF 状态。AOF 重写功能可有效控制文件大小,避免性能下降。
|
5天前
|
存储 监控 NoSQL
【赵渝强老师】Redis的RDB数据持久化
Redis 是内存数据库,提供数据持久化功能以防止服务器进程退出导致数据丢失。Redis 支持 RDB 和 AOF 两种持久化方式,其中 RDB 是默认的持久化方式。RDB 通过在指定时间间隔内将内存中的数据快照写入磁盘,确保数据的安全性和恢复能力。RDB 持久化机制包括创建子进程、将数据写入临时文件并替换旧文件等步骤。优点包括适合大规模数据恢复和低数据完整性要求的场景,但也有数据完整性和一致性较低及备份时占用内存的缺点。
|
1月前
|
存储 缓存 NoSQL
大数据-45 Redis 持久化概念 RDB AOF机制 持久化原因和对比
大数据-45 Redis 持久化概念 RDB AOF机制 持久化原因和对比
35 2
大数据-45 Redis 持久化概念 RDB AOF机制 持久化原因和对比
|
1月前
|
设计模式 NoSQL 网络协议
大数据-48 Redis 通信协议原理RESP 事件处理机制原理 文件事件 时间事件 Reactor多路复用
大数据-48 Redis 通信协议原理RESP 事件处理机制原理 文件事件 时间事件 Reactor多路复用
36 2
|
1月前
|
消息中间件 分布式计算 NoSQL
大数据-41 Redis 类型集合(2) bitmap位操作 geohash空间计算 stream持久化消息队列 Z阶曲线 Base32编码
大数据-41 Redis 类型集合(2) bitmap位操作 geohash空间计算 stream持久化消息队列 Z阶曲线 Base32编码
25 2
|
1月前
|
存储 缓存 NoSQL
大数据-46 Redis 持久化 RDB AOF 配置参数 混合模式 具体原理 触发方式 优点与缺点
大数据-46 Redis 持久化 RDB AOF 配置参数 混合模式 具体原理 触发方式 优点与缺点
56 1
|
2月前
|
存储 缓存 NoSQL
Redis 大 Key 对持久化的影响及解决方案
Redis 大 Key 对持久化的影响及解决方案
43 1
|
2月前
|
存储 NoSQL 安全
8)详解 Redis 的配置文件以及数据持久化
8)详解 Redis 的配置文件以及数据持久化
37 0
|
2月前
|
存储 NoSQL Redis
Redis的RDB快照:保障数据持久性的关键机制
Redis的RDB快照:保障数据持久性的关键机制
53 0
|
2月前
|
存储 缓存 NoSQL
深入探究Redis的AOF持久化:保障数据安全与恢复性能的关键机制
深入探究Redis的AOF持久化:保障数据安全与恢复性能的关键机制
87 0