redis 持久化
redis 持久化有两种方式:1. RDB 方式 , 2. AOF 方式
RDB 方式
RDB持久化方式,是redis默认的持久方式。它是根据一定的“规则”自动或者是手动的,以“快照的”形式,将内存中的数据存储到硬盘中。
整个存储的过程叫“快照”.
快照原理
- redis 使用fork函数复制一份当前进程的副本
- 主进程继续处理客户端的请求,子进程将数据写入硬盘临时文件
- 子进程写入完成所有数据后湖使用临时文件替换旧的RDB文件。
快照文件位置
快照默认存储当前进程工作目录下dump.rdb
获取redis 的目录命令: config get dir
修改位置参数:
dir: 目录
dbfilename : 文件名称
# The filename where to dump the DB
dbfilename dump.rdb
# The working directory.
#
# The DB will be written inside this directory, with the filename specified
# above using the 'dbfilename' configuration directive.
#
# The Append Only File will also be created inside this directory.
#
# Note that you must specify a directory here, not a file name.
dir ./
RDB数据快照几种方式:
1. 自动快照
redis 允许用户自定义“自动快照规则”。
规则格式: save + seconds + changes
seconds: 时间(秒) changes: 内存中键被修改的次数
redis 提供如下默认配置:
save 900 1
save 300 10
save 60 10000
分别代表:
900秒里有一次修改就自动持久化
300秒内有10被修改就自动持久化
1分钟中有一万次被修改就自动持久化
验证方法
修改 redis.conf 的快照策略,通过 lastsave: 查看最近一次快照时间,比较保存前后的时间差异,来判断
2. 命令持久化
redis 除了自动快照,也可以手动进行快照,save, bigsave, flushall
save 命令
当执行save命令时候,redis会“同步”的方式进行快照操作,在快照过程中会“阻塞”所有的客户端请求。 数据量大时候,有可能造成客户端请求超时.
bigsave 命令
bigsave 不同于save 操作,它是采用异步的方式进行快照, 当进行bigsave命令后,redis会立即返回成功,redis服务器可以继续处理客户端的请求。
如果要判断快照是否成功,可以通过lastsave命令;
lastsave 可以获取最近一次成功的快照时间。 将快照前后的两次lastsave 时间做比对;
3. 主从复制
以后补充。
AOF 方式
默认情况下 redis 没有开启AOF(append only file) 方式持久化,因为AOF是采用日志的形式将每一条写命令都追加到硬盘上,这一过程明显会降低redis的性能。
开启方式与存储文件名称
appendonly yes
appendfilename appendonly.aof