Redis持久化方式

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: 因为redis是内存型的nosql数据库,所以对于数据的安全问题必须要考虑,redis支持将数据持久化的磁盘。redis的持久化方式有两种——RDB和AOF。

RDB详解

RDB 是 Redis 默认的持久化方案。在指定的时间间隔内,执行指定次数的写操作,则会将内存中的数据写入到磁盘中。即在指定目录下生成一个dump.rdb文件。Redis 重启会通过加载dump.rdb文件恢复数据。

RDB配置

打开redis.conf配置文件,在SNAPSHOTTING模块下,看到rdb的配置信息

save <指定时间间隔> <执行指定次数更新操作>,满足条件就将内存中的数据同步到硬盘中。默认配置默认是 900秒内有1个更改,300秒内有10个更改以及60秒内有10000个更改,则将内存中的数据快照写入磁盘。
若不想用RDB方案,可以把 save "" 的注释打开,下面三个注释,或者通过命令config set save ""

默认数据文件

本地默认数据文件名称为dump.rdb,可通过在redis.conf中修改文件名及文件所在位置

触发RDB快照

  • 在指定的时间间隔内,执行指定次数的写操作
  • 执行save(阻塞, 只管保存快照,其他的等待) 或者是bgsave (异步)命令
  • 执行flushall 命令,清空数据库所有数据
  • 执行shutdown 命令,保证服务器正常关闭且不丢失任何数据

RDB 的优缺点

优点:

  1. 适合大规模的数据恢复。
  2. 如果业务对数据完整性和一致性要求不高,RDB是很好的选择。

缺点:

  1. 数据的完整性和一致性不高,因为RDB可能在最后一次备份时宕机了。
  2. 备份时占用内存,因为Redis 在备份时会独立创建一个子进程,将数据写入到一个临时文件(此时内存中的数据是原来的两倍哦),最后再将临时文件替换之前的备份文件。所以Redis 的持久化和数据的恢复要选择在夜深人静的时候执行是比较合理的

RDB总结

AOF

AOF :Redis 默认不开启。它的出现是为了弥补RDB的不足(数据的不一致性),所以它采用日志的形式来记录每个写操作,并追加到文件中。Redis 重启的会根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。

修改redis.conf文件开启aof模式,如以下所示:

aof配置触发重写配置

通过客户端执行info persistence 命令查看,当前aof文件大小,及上次重写后记录的文件大小

aof重写机制

AOF采用文件追加方式,文件会越来越大为避免出现此种情况,新增了重写机制。根据aof配置生效,达到以下条件时触发aof重写,生成新的aof文件,只保留可以恢复数据的最小指令集.或者可以使用命令bgrewriteaof进行重写文件。

aof重写原理

  • AOF文件持续增长而过大时,会fork出一条新进程来将文件重写(也是先写临时文件最后再rename)。
  • 遍历新进程的内存中数据,每条记录有一条的Set语句。重写aof文件的操作,并没有读取旧的aof文件。
  • 而是将整个内存中的数据库内容用命令的方式重写了一个新的aof文件,这点和快照有点类似

AOF优缺点

优点

  • 每次修改同步:appendfsync always同步持久化,每次发生数据变更会被立即记录到磁盘,性能较差但数据完整性比较好
  • 每秒同步:appendfsync everysec异步操作,每秒记录,如果一秒内宕机,仅一秒内的数据丢失

缺点

  • 相同数据集的数据而言aof文件要远大于rdb文件,恢复速度慢于rdb
  • Aof运行效率要慢于rdb,每秒同步策略效率较好,不同步效率和rdb相同

AOF总结

持久化方案选择

无论是RDB还是AOF,redis开启持久化都是要付出性能代价,对于rdb持久化,一方面是bgsave在进行fork操作时Redis的主进程会阻塞,另一方面,子进程向硬盘写数据也会带来IO压力;aof持久化,向硬盘写数据的频率大大提高(默认配置时每秒写一次),IO压力会更大。

在实际生产环境中,根据数据量、应用对数据的安全要求等情况,会有各种各样的持久化策略。比如完全不使用任何持久化,使用RDB或AOF中的一种,或者同时开启RDB和AOF。

(1)如果Redis中的数据完全丢弃也没有关系,那么可以不开启持久化;

(2)在单机环境下(对于个人开发者,这种情况可能比较常见),如果可以接受十几分钟或更多的数据丢失,选择RDB对Redis的性能更加有利;如果只能接受秒级别的数据丢失,应该选择AOF。

(3)主从配置情况
master:完全关闭持久化(包括RDB和AOF),这样可以让master的性能达到最好
slave:关闭RDB,开启AOF(如果对数据安全要求不高,开启RDB关闭AOF也可以),并定时对持久化文件进行备份(如备份到其他文件夹,并标记好备份的时间);然后关闭AOF的自动重写,然后添加定时任务,在每天Redis闲时(如凌晨12点)调用bgrewriteaof。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
3月前
|
监控 NoSQL Linux
【分布式】Redis的持久化方案解析
【1月更文挑战第25天】【分布式】Redis的持久化方案解析
|
7天前
|
存储 NoSQL Java
Redis奔溃了快看看有没开启持久化
Reis作为一个内存数据库,整个数据库状态都存储在内存里,如果在运行过程中发生崩溃,那整个数据库状态可就完全不见了,相当于整个服务器被初始化。Redis在这方面肯定有所作为,我们来看看它做了什么功夫~
121 0
Redis奔溃了快看看有没开启持久化
|
18天前
|
存储 NoSQL 算法
redis数据持久化
redis数据持久化
|
28天前
|
缓存 NoSQL Shell
【Redis深度专题】「核心技术提升」探究Redis服务启动的过程机制的技术原理和流程分析的指南(持久化功能分析)
【Redis深度专题】「核心技术提升」探究Redis服务启动的过程机制的技术原理和流程分析的指南(持久化功能分析)
148 0
|
1月前
|
缓存 NoSQL Redis
[Redis]——Redis持久化的两种方式RDB、AOF
[Redis]——Redis持久化的两种方式RDB、AOF
|
1月前
|
NoSQL 关系型数据库 MySQL
Redis 两种持久化方式 AOF 和 RDB
Redis 两种持久化方式 AOF 和 RDB
|
1月前
|
NoSQL Redis 数据库
【怒怼大厂面试官】听说你精通Redis?说说Redis持久化
咳咳咳,看你简历写了精通Redis,那我就随便问问。主要有RDB持久化、AOF持久化。是这样,Redis服务器会维护一个AOF重写缓冲区,该缓冲区会在子进程创建新AOF文件期间,记录服务器执行的所有写命令。
55 1
【怒怼大厂面试官】听说你精通Redis?说说Redis持久化
|
2月前
|
存储 NoSQL Redis
Redis淘汰策略、持久化、主从同步与对象模型
Redis淘汰策略、持久化、主从同步与对象模型
90 0
|
2月前
|
NoSQL Redis 数据库
Redis的安全网:掌握RDB和AOF的持久化技术【redis第四部分】
Redis的安全网:掌握RDB和AOF的持久化技术【redis第四部分】
119 0
|
2月前
|
NoSQL Redis
spring-state-machine使用redis持久化
spring-state-machine使用redis持久化
32 0

热门文章

最新文章