一、持久化的作用
1. 什么是持久化
redis 所有数据保存在内存中,对数据的更新将异步地保存到磁盘上。
2. 持久化方式
- 方式一:快照
- MySQL Dump
- Redis RDB
- 方式二:写日志
- Redis AOF
- MySQL Binlog
- Hbase HLog
二、RDB
2.1 什么是RDB
redis主从复制的时候,也会用到RDB
2.2 触发机制-主要三种方式
- save(同步)
- 在数据量很大的时候,会存在阻塞,因为redis是单线程的。
- 文件策略:如果存在老的RDB文件,新的文件会替换老的文件
- 复杂度:O(N),因为需要将redis中的所有数据都写在RDB文件中
- bgsave(异步)
这个createRDB是由子进程来完成的。
- 自动
- 在某些条件达到的时候,自动地生成RDB文件 (这个条件可以在配置文件中配置)
上面表格中满足任意条件就会自动创建RDB,这里面第一行的意思是:每900秒,有一个数据改变,就会生成RDB文件。
2.3 触发机制-不容忽略方式
- 全量复制
- 主从复制的时候,主会自动生成RDB文件
- debug reload
- shutdown
- 执行这个命令的时候,会生成RDB文件
三、AOF
3.1 RDB现存问题
3.2 什么是AOF
主要写入一个数据,就向AOF文件中增加一条数据。
3.3 AOF的三种策略
- always
- everysec
- no
3.4 AOF重写
四、RDB和AOF的抉择
五、开发运维常见问题
- fork操作
- 同步操作,做了一个内存页的拷贝。
- 与内存量息息相关:内存越大,耗时越长(与机器类型有关)
- info:latest_fork_usec
- 进程外开销
- AOF追加阻塞
- 单机多实例部署