redis持久化机制RDB和AOF的概念及使用
如果想redis仅作为纯内存的缓存来用,可禁止RDB和AOF所有的持久化机制
1. Redis持久化的作用:
Redis 是内存数据库,其将自己的数据存储在内存中,如果 Redis 发生宕机,且没有进行持久化的,那么Redis 重启后将没有之前的数据。而通过持久化,Redis可以在重启后,快速找回之前的数据,防止大量请求打入数据库。
对于企业级的redis架构来说,持久化是不可减少的
企业级redis集群架构:海量数据、高并发、高可用
2. Redis持久化的重要性-缓存雪崩
如Redis不可用了,要做的事是让Redis尽快变得可用,重启Redis,尽快让它对外提供服务,如果没做数据备份,这时Redis启动了也不可用,因为数据都没了。
有可能大量的请求过来,缓存全部无法命中,在Redis里找不到数据,这时缓存雪崩问题,所有请求,没有在redis命中,就会去mysql数据库这种数据源头中去找,一下子mysql承接高并发,然后就挂了。mysql挂掉,数据也就无法恢复到Redis里面去。Redis的数据从mysql来。。。
如果把Redis的持久化做好,备份和恢复方案做到企业级的程度,即使Redis故障了,也可通过备份数据,快速恢复,一旦恢复立即对外提供服务。
3. 持久化的方式:
快照(先把数据拷贝出来,做个备份):Mysql Dump 和 Redis RDB
日志(某时某点的日志记录):MySQLBinlog和Hbase HLog和Redis AOF
注:
如果同时用RDB和AOF两种持久化机制,在redis重启时,会用AOF来重新构建数据,因AOF中的数据更加完整
3.1 RDB快照持久化方式
如何触发RDB持久化
- 手动save命令(同步)
save
- 手动bgsave命令(异步)
bgsave
- 通过配置自动触发。(自动)
RDB默认开启 在redis安装文件目录下使用如下命令关闭RDB
config set save ""
修改生成RDB的文件名
设置自动保存的间隔
每隔60s,如果超过1000个key发生了变更,就生成一个新的dump.rdb文件,当前redis内存中完整的数据快照,这个操作也被称之为snapshotting,快照
save和bgsave区别
save
- 该命令会阻塞当前redis服务器,执行save命令期间,redis不能处理其他命令,直到RDB过程完成为止。具体流程如下:
bgsave
- 执行该命令时,redis会在后台异步进行快照操作,快照同时还可以响应客户端请求。具体流程如下:
两者总结
RDB优点
(1)RDB文件紧凑,全量备份,非常适合用于进行备份和灾难恢复。
(2)生成RDB文件的时候,redis主进程会fork()一个子进程来处理所有保存工作,主进程不需要进行任何磁盘IO操作。
(3)RDB 在恢复大数据集时的速度比 AOF 的恢复速度要快。
RDB缺点
快照持久化期间修改的数据不会被保存,可能丢失数据。数据完整性比较差。
3.2 AOF 默认该模式是关闭的。
提供一种更加高效的方式AOF,工作机制很简单,redis会将每一个收到的写命令都通过write函数追加到文件中。通俗的理解就是日志记录。
更改配置文件开启AOF模式
AOF优点
(1)AOF可以更好的保护数据不丢失,一般AOF会每隔1秒,通过一个后台线程执行一次fsync操作,最多丢失1秒钟的数据。
(2)AOF日志文件没有任何磁盘寻址的开销,写入性能非常高,文件不容易破损。
(3)AOF日志文件即使过大的时候,出现后台重写操作,也不会影响客户端的读写。
AOF缺点
(1)对于同一份数据来说,AOF日志文件通常比RDB数据快照文件更大.
(2) 恢复数据时时间要比快照模式慢很多。