单节点Redis存在的问题:
- 数据丢失
- 并发能力
- 存储能力
- 故障恢复
Redis的持久化:
RDB(Redis数据备份文件)持久化
save表示有Redis的主进程执行rdb,会阻塞所有命令,bgsave表示后台保存。
redis默认在停机前会进行自动持久化的操作,如下图。
redis自动将数据保存在dump.rdb文件中,下次启动时会自动恢复数据。
以上的自动保存功能是在redis正常退出时才会执行自动保存,但是如果在运行过程中突然宕机,数据就会丢失。所以需要进行定时的RDB操作,来保证数据的持久化。
如果删除dump.rdb文件数据就不会恢复了。
设置save 5 1:在5秒内,如果至少有一个key被修改,则执行bgsave,如果是save ""则表示禁用RDB。
bgsave开始时会fork主进程得到子进程,子进程共享主进程的内存数据,完成fork后读取内存中的数据。因为需要数据拷贝,所以要预留内存。
AOF持久化:
AOF(追加文件),Redis处理的每一个写命令都会记录在AOF文件中,可以看作是日志文件。
AOF文件格式如下:
禁用RDB:save ""
开启AOF:
刷盘策略:
重启redis,就不再加载RDB文件。
存入数据,自动创建aof文件,下次启动时再次执行aof中的命令,对数据进行恢复。但是对于相同的key恢复数据存在冗余操作。
停止redis服务:
再次重启加载appendly.aof文件
开启文件重写功能:
AOF和RDB对比: