一、 文档介绍
redis作为一个内存数据库,读写快,效率高,但是也会有宕机丢失数据的风险,于是就需要持久化操
Q&A:
数据量大于内存大小时应该怎么做?
增加内存or采用内存淘汰策略orRedis集群
持久化会辅助扩大Redis的存储空间么?
不会,持久化的主要作用是数据备份,保证数据不会因进程退出而丢失
(在dump的基础上开始准备Restore的实现,dump操作的第一步就是将aof文件内的记录同步到redis内,故了解一下aof文件)
二、RDB与AOF持久化的原理
2.1 RDB
RDB可以认为是Snapshot文件,当恢复时,通过加载RDB文件。把数据从磁盘加载读取到Redis中。
RDB产生:(考虑快照时的操作)
RDB的加载:
Redis持久化可以禁用,此时数据仅存在于服务器的运行时间内
Redis持久化也可以共存,当同时存在的时候,Redis重启是会先加载AOF文件
2.2 AOF
AOF可以认为是日志文件,Append only File,每次对数据的变更或者操作都会先记录打AOF内,当服务启动的时候就会先读取这些文件,重新执行一遍来恢复原始数据。
AOF提供三种同步(写aof文件与操作数据的同步)的方式:
AOF文件的格式与解析:
AOF优化:(重写)
当对一个现在为0的值执行100遍“a++”操作的话,如果每一次都记录一个操作再同步,非常浪费资源与时间,并且文件也会变大,重写即将这一百条数据写成set a 100,减少文件大小,并且提高载入速率
三、RDB与AOF的优缺点
3.1 RDB
优点:
缺点:
3.2 AOF
优点:
缺点:
三、取舍
一般来说,不考虑硬盘大小,最安全的做法是RDB与AOF同时使用,即使AOF损坏无法修复,还可以用RDB来恢复数据。
如果Redis的数据在你的服务中并不是必要的数据,例如只是当简单的缓存,没有缓存也不会造成缓存雪崩。说明数据的安全可靠性并不是首要考虑范围内,那么单独只使用RDB就可以了。
不推荐单独使用AOF,因为AOF对于数据的恢复载入来说,比RDB慢。
原文:https://www.cnblogs.com/Flower-Z/p/10691441.html