redis实现持久化存储的两种方案

一.简单说明

redis是非关系型数据库,是一种内存型数据库。数据存储在内存中,所以当我们关掉软件,或者拔掉电源时,内存中的数据就会丢失。针对此场景,这里提出持久化的方案。它的核心就是将内存中的数据存储到硬盘中进行持久化。

  • RDB: 基于快照的持久化,速度更快,一般用作备份。主从复制也是依赖于rdb持久化功能。
  • AOF:以追加的形式记录redis操作日志的文件。可以最大程度保证redis数据安全,类似于mysql的binlog。

二.持久化存储的方案

2.1 方案一___RDB持久化

这个是redis默认的持久化的方案,它的原理是在一定时间内检测key的变化情况,然后持久化数据。它可以手动执行save来触发持久化数据,也可以通过配置redis.conf文件,执行定时执行。
RDB持久化产生的RDB文件是一个经过压缩的二进制文件,这个文件保存在硬盘中,redis可以通过这个文件还原数据库当时的状态。涉及核心配置如下:

[root@k8s001 ~]# cat /etc/redis.conf
dbfilename  s17dump.rdb           # 指定rdb的数据文件   
bind 0.0.0.0
requirepass redhat                # 指定redis的密码   
save 900 1                        # 代表900秒内,有1个修改key的操作,就进行持久化      
save 300 10                       # 300秒内,有10个修改类的操作,就持久化
save 60  10000                    # 60秒内,有10000个修改类的操作,就持久化

优点:速度快,适合做备份,主从复制就是基于RDB持久化功能实现

2.2 方案二__AOF持久化

这里不需要手动的save触发持久化。
记录服务器执行的所有变更操作命令(例如set del等),并在服务器启动时,通过重新执行这些命令来还原数据集。AOF 文件中的命令全部以redis协议的格式保存,新命令追加到文件末尾。
涉及核心配置如下:

[root@k8s001 ~]# cat /etc/redis.conf
appendonly yes            # 开启aof持久化的参数
appendfsync everysec      # 每秒进行一次aof持久化

优点:最大程度保证数据不丢失。
缺点:日志记录非常大

RDB 优点:访问性能最佳 缺点:数据不安全、fork消耗极大
AOF 优点:数据相对安全 缺点:访问性能相对不在最佳

原文地址:https://www.cnblogs.com/yuhaohao/p/13176979.html