1. Redis 的优点和缺点

1.1. 优点

  • 读写性能优异
  • 支持 RDBAOF 两种数据的持久化
  • 支持主从复制,主机会自动将数据同步到从机,可以进行读写分离
  • 支持丰富的数据结构,如 String,List,Set,Zset(有序集合),Hash 五种数据结构

1.2. 缺点

  • Redis 不具备自动容错和恢复功能。主机,从机的宕机都会导致读写请求失败,需要等待机器重启才能恢复
  • 主机宕机前,如果有部分数据未能及时同步到从机,重启主机后会导致数据不一致的问题

2. Redis 持久化机制

持久化数据:就是将内存中的数据写入到硬盘里面,大部分原因是为了之后重用数据(比如重启机器、机器故障之后恢复数据),或者是为了防止系统故障而将数据备份到一个远程位置Redis 的持久化方式有 RDBAOF 两种

在这里插入图片描述

2.1. RDB 快照持久化

Redis 可以通过创建快照来获得存储在内存里面的数据。创建快照之后,可以对快照进行备份,可以将快照复制到其他服务器从而创建具有相同数据的服务器副本( Redis 主从结构,主要用来提高 Redis 性能),还可以将快照留在原地以便重启服务器的时候使用

在这里插入图片描述

2.1.1. RDB 快照持久化方式

快照持久化是 Redis 默认采用的持久化方式,在 redis.conf 配置文件中默认有此下配置

# 在 900 秒(15分钟)之后,如果至少有 1 个 key 发生变化,Redis 就会自动触发 BGSAVE 命令创建快照
save 900 1     
# 在 300 秒(5分钟)之后,如果至少有 10 个 key 发生变化,Redis 就会自动触发 BGSAVE 命令创建快照      
save 300 10 
# 在 60 秒(1分钟)之后,如果至少有 10000 个 key 发生变化,Redis 就会自动触发 BGSAVE命令创建快照         
save 60 10000        

2.1.2. RDB 快照持久化优点

  • RDB 是一个非常紧凑的文件,它保存了某个时间点的数据集,非常适用于数据集的备份,比如你可以在每个小时保存一下过去 24 小时内的数据,同时每天保存过去 30 天的数据,这样即使出了问题你也可以根据需求恢复到不同版本的数据集
  • RDB 是一个紧凑的单一文件,很方便传送到另一个远端数据中心或者亚马逊的 S3 (可能加密),非常适用于灾难恢复
  • AOF 相比,在恢复大的数据集的时候,RDB 方式会更快一些

2.1.3. RDB 快照持久化缺点

  • 耗时、耗性能
  • 不可控、丢失数据

2.2. AOF 持久化

与快照 RDB 持久化相比,AOF 持久化的实时性更好,因此已成为主流的持久化方案。默认情况下 Redis 没有开启 AOF 方式的持久化,可以通过 appendonly 参数开启

# 开启 AOF 持久化
appendonly yes       

开启 AOF 持久化后每执行一条会更改 Redis 中的数据的命令,Redis 就会将该命令写入硬盘中的 AOF 文件。AOF 文件的保存位置和 RDB 文件的位置相同,都是通过 dir 参数设置的,默认的文件名是 appendonly.aof

2.2.1. AOF 的运行原理-创建

在这里插入图片描述

2.2.2. AOF 的运行原理-恢复

在这里插入图片描述

2.2.3. AOF 快照持久化方式

Redis 的配置文件中存在三种不同的 AOF 持久化方式,它们分别是

# 每次有数据修改发生时都会写入 AOF 文件,速度缓慢但是最安全
appendfsync always    
# 每秒钟同步一次,显示地将多个写命令同步到硬盘。AOF 默认使用的
appendfsync everysec  
# 让操作系统决定何时进行同步,速度最快
appendfsync no        

为了兼顾数据和写入性能,用户可以考虑 appendfsync everysec 选项(AOF 默认使用) ,让 Redis 每秒同步一次 AOF 文件,Redis 性能几乎没受到任何影响。而且这样即使出现系统崩溃,用户最多只会丢失一秒之内产生的数据。当硬盘忙于执行写入操作的时候,Redis 还会优雅的放慢自己的速度以便适应硬盘的最大写入速度

3. RDBAOF 的对比选择

- RDB AOF
启动优先级
文件大小
恢复速度
数据安全丢数据根据策略决定
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐