什么是持久化?简单来讲就是将数据放到断电后数据不会丢失的设备中,也就是我们通常理解的硬盘上。
Blog:博客园 个人
什么是持久化?简单来讲就是将数据放到断电后数据不会丢失的设备中,也就是我们通常理解的硬盘上。
首先我们来看一下数据库在进行写操作时到底做了哪些事,主要有下面五个过程:
- 客户端向服务端发送写操作(数据在客户端的内存中);
- 数据库服务端接收到写请求的数据(数据在服务端的内存中);
- 服务端调用write这个系统调用,将数据往磁盘上写(数据在系统内存的缓冲区中);
- 操作系统将缓冲区中的数据转移到磁盘控制器上(数据在磁盘缓存中);
- 磁盘控制器将数据写到磁盘的物理介质中(数据真正落到磁盘上);
Redis持久化方式分为RDB和AOF。
RDB持久化
RDB(Redis DataBase)持久化是在指定的时间间隔内将内存中的数据集快照写入磁盘。同时也是默认的持久化方式。
工作流程
配置
触发方式
save m n # 表示m秒内数据集存在n次修改时,自动触发bgsave
例如,以下可以同时配置:
# 900秒内执行1次更新 save 900 1 # 300秒内执行10次更新 save 300 10 # 60秒内执行10000次更新 save 60 10000
rdb文件存放目录
# 指定本地数据库文件名,一般采用默认的dump.rdb dbfilename dump.rdb # 备份文件存放目录,一般也用默认配置 dir ./
开启数据压缩
配置存储至本地数据库时是否压缩数据,默认为yes
。Redis采用LZF压缩方式,但占用了一点CPU的时间。若关闭该选项,但会导致数据库文件变的巨大。建议开启。
rdbcompression yes
AOF持久化
AOF(Append only file)持久化是以独立日志的方式记录每次命令,重启时再重新执行AOF文件中的命令达到恢复数据的目的。
AOF的主要作用是解决了数据持久化的实时性。
AOF直接采用文本协议格式(兼容性好),开启AOF后,所有写入命令都包含追加操作,直接采用文本协议格式,避免了二次处理开销。
工作流程
AOF的工作流程操作:命令写入(append)、文件同步(sync)、文件重写(rewrite)、重启加载(load)。
流程如下:
- 所有的写入命令会追加到aof_buf(缓冲区)中;
- AOF缓冲区根据对应的策略向硬盘做同步操作;
- 随着AOF文件越来越大, 需要定期对AOF文件进行重写, 达到压缩的目的;
- 当Redis服务器重启时, 可以加载AOF文件进行数据恢复;
开启AOF
默认不开启,启用AOF持久化方式
appendonly yes # AOF文件名称 appendfilename "appendonly.aof" # 备份文件存放路径,同RDB dir ./ # 同步频率 appendfsync everysec
appendfsync同步频率配置参考:
- always:命令写入
aof_buf
后调.........