1、两种持久化方式
1.1、RDB
简介:RDB是将数据库中的数据定期以快照的方式存储到磁盘,保存到rdb文件中,并在启动时自动加载rdb文件,以达到数据持久化。redis默认开启的是RDB持久化方式。
设置自动保存触发条件
- 通过redis.conf配置文件设置RDB持久化
默认的持久化条件为 save 3600 1 300 100 60 10000,说明:
- save 3600 1 # 在 3600 秒 (1 小时) 内发生 1 次写操作
- save 300 100 # 在 300 秒 (5 分钟) 内发生 100 次写操作
- save 60 10000 # 在 60 秒 (1 分钟) 内发生 1 万次写操作
如果想要关闭RDB持久化,设置save ""即可。
手动触发保存快照
SAVE命令:运行此命令时,将会阻塞主进程进行快照保存,直至快照保存完毕,主进程才会继续处理Redis的请求。
BGSAVE命令:运行此命令时,将会产生一个子进程进行快照保存,快照保存时不会阻塞主进程,主进程仍然可以处理Redis请求。
1.2、AOF
简介:Redis会把每一次操作都记录到一个文件中,当Redis进行重启时会把AOF产生的文件中的所有操作执行一遍,确保数据恢复到最新。
开启AOF
- 通过修改配置文件,把redis.conf里的appendonly属性改为yes
- 通过命令更改配置:config set appendonly yes | no
AOF提供了三种fsync配置:
- appendfsync no:不进行fsync,将flush文件的时机交给OS决定,速度最快
- appendfsync always:每写一条日志就进行一次fsync操作,数据安全性最高,速度最慢
- appendfsync everysec:线程在后台每秒fsync一次,默认开启这个
为了解决AOF产生冗余数据,开启AOF rewrite功能
auto-aof-rewrite-min-size 10mb
auto-aof-rewrite-percentage 100
配置说明:AOF文件达到10MB的100%的倍数时,即达到20MB时,会调用AOF rewrite功能,将文件进行压缩 。
2、RDB和AOF对比
RDB
优点:
- 会产生一个完整的快照文件,数据可靠
- RDB保存快照时会创建子进程,保存快照时基本不会影响主进程处理请求
- 进行数据恢复时比AOF方式快
缺点:
- RDB产生的快照并不是实时产生,而是根据配置文件中save的条件定期生成,可能会丢失数据。
AOF
优点
- AOF下在配置文件中设置appendfsync为always时,任何已写入的数据都不会丢失,即使设置了appendfsync为everyse,最多也只会丢失1秒的数据
缺点
- 文件比RDB大
- 耗能比RDB高
- 数据恢复比RDB慢