redis持久化机制-RDB-AOF-混合持久化

本文介绍了Redis的三种持久化机制:RDB快照、AOF日志和混合持久化。RDB在指定条件下创建内存快照到dump.rdb文件,适合灾难恢复;AOF记录每次写操作,数据更完整但恢复速度慢;混合持久化在AOF重写时加入RDB快照,兼顾速度和准确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

RDB方式的持久化

将redis内存直接把snapshot保存到文件系统。将整个内存数据存放到dump.rdb file 中。配置如下:
[allen@localhost src]$ cd redis-5.0.3
[allen@localhost redis-5.0.3]$ vi redis.conf 

配置解释:

在60秒之内有10000条redis写命令

900秒内写一次

300秒内写10次

持久化配置可以配多个策略,只要满足其中一个条件就会触发一次持久化

如下save使用,执行save dump.rdb文件会改变,save命令执行会柱塞redis客户端的命令。

[allen@localhost redis-5.0.3]$ ls -lrt dump.rdb
-rw-rw-r--. 1 allen allen 858 Jan  4 06:02 dump.rdb
[allen@localhost redis-5.0.3]$ src/redis-cli
127.0.0.1:6379> set user:name allen1
OK
127.0.0.1:6379> save
OK
127.0.0.1:6379> pwd
[allen@localhost redis-5.0.3]$ ls -lrt dump.rdb
-rw-rw-r--. 1 allen allen 876 Jan  5 04:57 dump.rdb

bgsave的使用

开启另外一个线程来写内存数据到另外一个副本的dump文件中,同时写期间的的操作也同时写到这个备份的dump文件中。

 AOF 持久化

在redis.conf 中将appendonly 改成yes,开启AOF 持久化

appendonly yes

持久化的数据会被写的文中appendonly.aof 中,文件名称可以修改

# The name of the append only file (default: "appendonly.aof")
appendfilename "appendonly.aof"

appendonly的配置策略:

# appendfsync always
appendfsync everysec
# appendfsync no

一般三选一

1. 每执行一条命令,都会马上被持久化到文件中

2. 每1秒中去持久化一次,在故障发生时只会丢一秒的数

3. 不主动发起持久化,由操作系统统一调配

AOF 里面记录了每条命令,恢复数据的时候会把里面的命令全部拿来执行一次,所以数据恢复的时候会非常慢

AOF 也会对命令做了一些优化,把一些重复的命令只留下最后一条,不用保存过程。

AOF命令重写bgrewriteaof

bgrewriteaof 命令是手动重写,即把backup文件中的命令重写,删除些过程的命令,只保留最后结果的命令,如下配置是自动触发重写的命令。

配置如下:

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

配置解释:

aof文件和上次相比增长了100%

aof文件至少大于64m

R

默认开启的是RDB, AOF 需要自己开启,如果2种持久化都开启,2个文件都会帮你做了,生产环境重启了,默认用AOF文件进行恢复,因为AOF数据更全。

混合持久化方式

开启混合持久化方式如下,注意: 开启它之前必须现开启AOF

aof-use-rdb-preamble yes

redis 4.0之后,推出了混合持久化方式,他把RDB,AOF的有点集中起来,简单的说就是在你执行bgrewriteaof或触发自动AOF重写的时候,将AOF文件以RDB文件格式(二进制压缩)写到AOF文件中。而在下次重写之前,依然用aof文件格式追加到上面二进制数据的后面。

这样既可以让数据恢复时和RDB一样快速,又可以和AOF文件一样准确。兼顾了性能和安全性。

用这种方式就可以把RDB方式快照给关掉了。

[allen@localhost redis-5.0.3]$ cat appendonly.aof
REDIS0009	redis-ver5.0.3
redis-bits󿿀򳨭e	used-memè
                        𮤭preamble󿾁ÿ'ʵ޳#ɪ2
$6
SELECT
$1
0
*3
$3
set
$6
Allen2
$11
hello workd
*3
$3
set
$6
Allen3
$11
hello world

在你关掉redis之前会帮你做一次持久化

每次你自己去启动redis的时候就会自动去找aof或rdb文件,自动把里面的数据load到内存中里面去。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值