RDB快照
将数据当前的形式全部保存
启动
通过save指令,手动执行一次数据持久化操作。
在redis.conf中配置的dir指定目录下会生成一个rdb文件(默认名称为dump.rdb)
相关配置
dbfilename dump.rdb
设置本地数据库文件名,默认为dump.rdb。通常设置为dump-端口号.rdb
dir
设置存储.rdb文件的目录
通常设置在存储空间较大的目录中,名为data
rdbcompression yes
设置存储至本地数据库时是否压缩数据,默认yes,采用LZF压缩。
默认设置开启,如果设置no,可以节省cpu运行时间,但是结果会导致文件变大
rdbchecksum yes
设置是否进行RDB文件格式校验,该校验过程在写文件和读文件过程均进行
通常默认设置开启,如果设置为no,可以节约读写时间大概10%的消耗,但是存在一定数据损坏的风险
save second changes
说明:满足规定时间(second)内key的变化数量达到指定数量(changes)即进行自动保存数据
判断标准:
- 指令对数据产生影响,查询不算
- 产生真正影响
- 不进行数据对比,区别于第二点,这里不进行数据对比的意思是:如果进行两次相同的set操作,算作对两个key进行了影响数据的操作,它并不会去验证第二次指令set的数据是否和原来的数据一致
- 当满足上述三个条件,则影响数量就会+1,也就是说除了查询外,增删改都会产生影响
数据恢复的时机:在redis服务启动时恢复
save指令使用注意事项
redis是单线程的,如果save指令执行的时间过长,会阻塞当前的redisf服务器,直到当前RDB工作完成为止,可能造成长时间阻塞
bg-save
手动启动后台保存操作,但不是立即执行
bgsave命令执行后,redis会调用linux的fork函数生成子进程去重启一个redis服务,然后创建rdb文件
相关配置:在save配置的基础上新增
- stop-writes-on-bgsave-error yes (默认开启)
- 说明:后台存储过程中如果出现错误,是否停止保存操作(建议开启)
RDB的弊端
存储数据量较大,效率较低
- 基于快照的思想,每次读写都是全部数据,当数据量较大时,效率非常低
大数据下的IO性能低 - 基于fork函数创建的子进程,内存产生额外消耗
- 宕机会带来数据丢失的风险
AOF重写
将数据操作的过程记录下来
概念
AOF持久化:以独立日志的方式,记录每次写命令,重启时再重新执行AOF文件中的命令,以达到恢复数据的目的。同RDB相比,相当于从直接记录数据到记录数据产生的过程
AOF的主要作用是解决了数据持久化的实时性
AOF写数据的过程
AOF写数据的三种策略
- always(每次):每次写入操作均同步到AOF中,数据零误差,性能低
- everysec(每秒):每秒将缓冲区中的指令同步到AOF文件中,数据准确性下降,性能较高,在系统突然宕机的情况下也只会损失1秒的数据 (默认配置)
- no(系统控制):由操作系统控制每次同步到AOF文件中的周期,整体过程不可控
AOF开启
- 配置:appendonly yes | no
- 作用:是否开启AOF,默认关闭
- 配置:appendfsync always | everysec | no
- 作用:AOF读写策略