持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第7天,点击查看活动详情
Redis持久化
- Redis持久化分为RDB持久化和AOF持久化 :前者将当前数据保存到硬盘,后者则是将每次执行的写命令保存到硬盘
- AOF持久化的实时性更好,即当进程意外退出时丢失的数据更少
RDB持久化
RDB持久化是将当前进程中的数据生成快照保存到硬盘(因此也称作快照持久化),保存的文件后缀是rdb;当Redis重新启动时,可以读取快照文件恢复数据。
只有一个文件 dump.rdb,方便持久化 容灾性好,一个文件可以保存到安全的磁盘 性能最大化,fork 子进程来完成写操作,让主进程继续处理命令。通过使用单独子进程来进行持久化,主进程不会进行任何 IO 操作,这样保证了 redis 的高性能。相对于 AOF,数据量极大时,RDB 的启动效率更高
触发方式
RDB持久化的触发分为手动触发和自动触发两种。
手动触发
两种命令:通过save命令和bgsave命令都可以手动触发生成RDB的文件
save命令
-
save命令会阻塞Redis服务器进程,直到RDB文件创建完毕为止,在Redis服务器阻塞期间,服务器不能处理任何命令请求。
-
save命令整个过程都会阻塞服务器,线上环境要禁止save的使用
bgsave命令
- bgsave命令会创建一个子进程,由子进程来负责创建RDB文件,父进程(即Redis主进程)则继续处理请求
- bgsave命令执行过程中,只有fork子进程时会阻塞服务器,后文中也将只介绍bgsave命令
- 在自动触发RDB持久化时,Redis也会选择bgsave
2) 自动触发
save m n
自动触发策略指的是 Redis 在指定的时间内,数据发生了多少次变化时,会自动执行BGSAVE命令。自动触发的条件包含在了 Redis 的配置文件中通过save m n,指定当m秒内发生n次变化时,会触发bgsave。
举个例子:
save 60 1000 表示在 60 秒内,至少更新了 1000 条数据,Redis 自动触发 BGSAVE 命令,将数据保存到硬盘。