Loading

redis持久化

redis持久化

1.1 介绍

# redis持久化
redis作为一个内存数据库,数据是以内存作为载体存储的,那么一单redis服务器进程退出,服务器中的数据也会消失。为例解决这个问题,redis提供了持久化机制。也就是把数据保存在磁盘中。有两种方式保存。

# rdb快照持久化
rdb快照的方式是指在一定的时间间隔,将内存中的数据集写入磁盘。在创建快照之后,用户可以备份该快照,可以将快照复制到其他服务器以创建相同数据的服务器副本,或者在重启服务器后恢复数据。RDB是Redis默认的持久化方式

# aof持久化
除了RDB持久化,Redis还提供了AOF(Append Only File)持久化功能,AOF持久化会把被执行的写命令写到AOF文件的末尾,记录数据的变化。默认情况下,Redis是没有开启AOF持久化的,开启后,每执行一条更改Redis数据的命令,都会把该命令追加到AOF文件中,这是会降低Redis的性能,但大部分情况下这个影响是能够接受的,另外使用较快的硬盘可以提高AOF的性能

1.2 rdb快照持久化

# 介绍
RDB持久化会生成RDB文件,该文件是一个压缩过的二进制文件,可以通过该文件还原快照时的数据库状态,即生成该RDB文件时的服务器数据。RDB文件默认为当前工作目录下的dump.rdb,可以根据配置文件中的dbfilename和dir设置RDB的文件名和文件位置

# 触发快照的时机
1.执行save和bgsave命令
2.配置文件设置save <seconds> <changes>规则,自动间隔性执行bgsave命令
3.主从复制时,从库全量复制同步主库数据,主库会执行bgsave
4.执行flushall命令清空服务器数据
5.执行shutdown命令关闭Redis时,会执行save命令

# save和bgsave命令
执行save和bgsave命令,可以手动触发快照,生成RDB文件,
使用save命令会阻塞Redis服务器进程,服务器进程在RDB文件创建完成之前是不能处理任何的命令请求
而使用bgsave命令不同的是,basave命令会fork一个子进程,然后该子进程会负责创建RDB文件,而服务器进程会继续处理命令请求

# 自动间隔触发
在配置文件中设置save <seconds> <changes>规则,可以自动间隔性执行bgsave命令
save 900 1
save 300 10
save 60 10000


save 900 1  当时间到900秒时,如果至少有1个key发生变化,就会自动触发bgsave命令创建快照
save 300 10  当时间到300秒时,如果至少有10个key发生变化,就会自动触发bgsave命令创建快照
save 60 10000    当时间到60秒时,如果至少有10000个key发生变化,就会自动触发bgsave命令创建快照

img

1.3 AOF持久化

# 介绍
除了RDB持久化,Redis还提供了AOF(Append Only File)持久化功能,AOF持久化会把被执行的写命令写到AOF文件的末尾,记录数据的变化。默认情况下,Redis是没有开启AOF持久化的,开启后,每执行一条更改Redis数据的命令,都会把该命令追加到AOF文件中,这是会降低Redis的性能,但大部分情况下这个影响是能够接受的,另外使用较快的硬盘可以提高AOF的性能

# 开启aof
可以通过配置redis.conf文件开启AOF持久化,关于AOF的配置如下

aof配置

# 配置

# appendonly参数开启AOF持久化
appendonly no

# AOF持久化的文件名,默认是appendonly.aof
appendfilename "appendonly.aof"

# AOF文件的保存位置和RDB文件的位置相同,都是通过dir参数设置的
dir ./

# 同步策略
# appendfsync always
appendfsync everysec
# appendfsync no

# aof重写期间是否同步
no-appendfsync-on-rewrite no

# 重写触发配置
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

# 加载aof出错如何处理
aof-load-truncated yes

# 文件重写策略
aof-rewrite-incremental-fsync yes

1.4 aof重写

# 介绍
随着时间的推移,Redis执行的写命令会越来越多,AOF文件也会越来越大,过大的AOF文件可能会对Redis服务器造成影响,如果使用AOF文件来进行数据还原所需时间也会越长
AOF重写的目的就是减小AOF文件的体积,不过值得注意的是:AOF文件重写并不需要对现有的AOF文件进行任何读取、分享和写入操作,而是通过读取服务器当前的数据库状态来实现的

# 触发方式
文件重写可分为手动触发和自动触发,手动触发执行bgrewriteaof命令,该命令的执行跟bgsave触发快照时类似的,都是先fork一个子进程做具体的工作

# 自动触发命令
# 表示当AOF文件的体积大于64MB,且AOF文件的体积比上一次重写后的体积大了一倍(100%)时,会执行`bgrewriteaof`命令
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

img

posted @ 2024-07-02 21:31  HuangQiaoqi  阅读(7)  评论(0编辑  收藏  举报