0%

redis持久化

1 概述

为什么要持久化?

我们知道,redis中的数据都存储在内存中,那么如果重启redis服务的话数据就全部丢失了。于是就需要将数据全部存储到磁盘上,当redis重启时可以直接通过磁盘上的备份文件进行数据恢复。

持久化方式有哪些?

redis提供两种方式进行持久化,一种是RDB持久化:原理是将Reids在内存中的数据库记录定时dump到磁盘上;另外一种是AOF(append only file)持久化:原理是将Reids的操作日志以追加的方式写入文件。

2 RDB持久化

RDB持久化是在指定的时间间隔内,fork一个子进程,先将数据写入一个临时文件,写入完成后,替换之前的临时文件,并且使用二进制压缩存储。

RDB的方式其实是牺牲了一些缓存的一致性(如果服务器一旦在定时持久化之前宕机,那么从这之前没有写入到磁盘的数据都将丢失),但是性能更好一些(持久化操作是由子进程来完成的)。

配置方式

1
2
3
4
5
save 900 1       #在900秒(15分钟)之后,如果至少有1个key发生变化,则dump内存快照。

save 300 10 #在300秒(5分钟)之后,如果至少有10个key发生变化,则dump内存快照。

save 60 10000 #在60秒(1分钟)之后,如果至少有10000个key发生变化,则dump内存快照。

3 AOF持久化

AOF持久化是将redis的所有操作都以文本的方式记录下来(查询操作不会记录,因为这对数据恢复没有任何作用)。

AOF的方式可以带来更高的数据安全性,即使出现宕机,也不会丢失已经存在于日志中的内容。但是AOF文件一般比较大,而且AOF运行效率一般来说也不如RDB。

注意,AOF中提供了3中同步策略,即每秒同步、每修改同步和不同步。事实上,每秒同步也是异步完成的,其效率也是非常高的。

配置方式

1
2
3
4
5
appendfsync always     #每次有数据修改发生时都会写入AOF文件。

appendfsync everysec #每秒钟同步一次,该策略为AOF的缺省策略。

appendfsync no #从不同步。高效但是数据不会被持久化。