为什么要持久化
Redis 是内存数据库,如果不将内存中的数据库状态保存到磁盘中,那么一旦服务器进程退出,服务器中的数据库状态也会丢失,数据丢失是一种很严重的生产及故障,所以需要对 Redis 数据进行持久化。Redis 提供了如下几种不同级别的持久化方式
- RDB 快照持久化可以在指定的时间间隔内生成内存数据集的时间点快照
- AOF 持久化记录服务器执行的所有写命令,并在服务重启时通过命令重放来还原数据
- 混合持久化,兼顾RDB和AOF的特性
RDB 快照
在默认情况下,Redis 将内存数据库快照保存在名为 dump.rdb
的二进制文件中。
可以通过修改 redis.conf
配置,让 Redis 在 N 秒内数据集至少有 M 个变动 这一条件被满足时,自动保存一次数据集。
1、rdb触发机制
# 触发机制-主要三种方式
# save(同步)--->阻塞--》如果数据量很多---》影响redis的查询操作
save
# bgsave(异步,Backgroud saving started)
# 自动(通过配置)
配置 seconds changes
save 900 1
save 300 10
save 60 10000
如果60s中改变了1w条数据,自动生成rdb
如果300s中改变了10条数据,自动生成rdb
如果900s中改变了1条数据,自动生成rdb
2、AOF (append-only file)
快照功能并不是非常耐久的(durable):如果 redis 因为某些原因而造成故障停机,那么服务器将丢失最近写入、且仍未保存到快照中的那些数据。
# AOF的三种策略
日志不是直接写到硬盘上,而是先放在缓冲区,缓冲区根据一些策略,写到硬盘上
always:redis–》写命令刷新的缓冲区—》每条命令fsync到硬盘—》AOF文件
everysec(默认值):redis——》写命令刷新的缓冲区—》每秒把缓冲区fsync到硬盘–》AOF文件
no:redis——》写命令刷新的缓冲区—》操作系统决定,缓冲区fsync到硬盘–》AOF文件\
# AOF 重写
本质就是把过期的,无用的,重复的,可以优化的命令,来优化
这样可以减少磁盘占用量,加速恢复速度
# aof配置
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
dir /root/lqz/redis/data
详细:
x深度好文:保姆级教程彻底搞懂Redis 持久化-腾讯云开发者社区-腾讯云 (tencent.com)