Redis的持久化
介绍之前,先说以下memcache,和redis的最大区别在于mem(内存)cache(缓存)不能落盘(持久化);而redis可以持久化。
Redis的数据是保存在内存中的,将内存的Redis数据保存到磁盘,恢复或者重启的时候再从磁盘读到内存,这一过程就是Redis的持久化。其目的是防止宕机或突然断电数据丢失,Redis的持久化有两种:
- 快照 RDB(redis database)(默认的)
- 日志 AOF(append only file)(可选的)
1.快照 RDB
字面意思,就是给数据拍个照,该方式是Redis的默认持久化方式。数据保存为dump.rdb,有三种触发机制:
(1)SAVE
save会阻塞Redis的进程,一直到dump.rdb文件保存完。
(2)BGSAVE
bgsave通过 fork 一个子进程,让其去创建 RDB 文件,因此为阻塞的。
(3)自动
RDB速度快,自动这种方式有个缺陷,就是突然断电,从最后一次自动保存后的时间段的数据将会丢失。
2.日志 AOF
AOF(Append-only File)的实现方式是通过日志记录的方式存储,例如set某个值,Redis就会在日志文件写一条。
AOF 三种策略:
(1)always
客户端是不会直接把命令写入 AOF 文件的,Liunx 系统会有一个缓冲机制,把一部分命令打包再同步到 AOF 文件,从而提高效率。
(2)everysec
每一秒的缓冲区的数据都会刷新到硬盘当中,最多有1秒的数据丢失。
(3)no
把控制权给了操作系统,得看操作系统什么时候刷新数据到磁盘。
为了数据重复,AOF还会重写,来减少冗余。例如:
有几个操作:
set mykey a
set mykey b
set mykey c
那么重写后就一条:
set mykey c
【参考】
1.https://www.cnblogs.com/zhoujinyi/archive/2013/05/26/3098508.html
2.https://redisbook.readthedocs.io/en/latest/internal/aof.html
3.一文明白redis持久化