首先我们要知道redis是存储在内存中的数据。
Redis在每一次重启时都会从硬盘中的存储文件中吧数据读到内存当中,在我们实际操作reids是,数据都是在内存当中的。
好了,知道这个之后我们就可以来了解什么是持久化策略了。reids不仅仅有着效率高的优势,还一个就是持久化。
Redis中的持久化策略分为两种(RDB,AOF)
RDB(Redis DATABase)
RDB是我们redis默认的一种策略。
原理:在指定的时间内对我们内存上的数据进行一次数据快照(可以理解为定时拍一张照片),然后将这个数据快照上传到我们的磁盘文件dump.rdb中。当我们重新启动reids时,就会自动读取dump.rdb中的数据到内存中,这样子就做到了持久化。
现在我们就要知道RDB是怎么进行数据快照的了,我们用户可以使用SAVE(同步) 和 bgsave(异步)。
也可以设置服务器的save选项,让服务器每隔一段时间执行一次bgsave。如
save:900 1
save:300 10
save:60 10000
意思就是服务器每隔900检查一次我们的数据库,如果有一次数据变动,就进行一次数据快照。
但是这里我们得注意,假如我们在这个900秒里面有数据进行了变动,但是在这个过程中我们的服务器突然宕机了,那么就会造成数据丢失,这是RDB的重大缺点之一。RDB在保存文件是都会开启一个子进程,不会打扰我们的主进程。但是数据量如果大了,就会造成耗费资源。
缺点:
每次保存都有fork()进程
可能意外造成数据丢失。
AOF(AppendOnly File)
aof默认是关闭状态的,需要在配置文件redis.conf开启aof。同时redis是支持我们的aof和rdb同时进行的。如果同时存在的话,aof的优先级要高于rdb。
原理:
aof会监听我们执行的命令,如果一旦发现了有修改数据的操作,就会将这个操作记录到我们的日志当中。这样子即时出现了问题一样能够重新回来。当我们重新启动redis时,就会读取日志中的操作,重新再执行一遍,这样子也能做到数据的持久性。
RDB的性能要高于aof