One minute
Redis的持久化
Redis支持内存数据持久化,将存储在内存中的数据以某种形式持久化到硬盘中,Redis重启后仍能加载硬盘中的数据重新使用。
Redis有两种持久化方式:一种RDB,一种AOF。
Redis默认的持久化方式为RDB,两种持久化方式可以单独使用,也可结合使用。
RDB
RDB方式是通过快照来完成的,当符合一定的条件时,Redis会自动将内存中的所有数据进行快照并存储到硬盘上。进行快照的条件在配置文件中指定,有两个参数:时间和改动的键的个数。
当在指定时间内被更改的键的个数大于指定数值时,就会进行快照。
Redis在以RDB方式持久化数据时,是以一个子进程来做的,也就是说进行RDB持久化时,不会影响Redis的主进程对外的使用。
RDB并不能绝对保证数据的不丢失
RDB的快照过程:
- Redis使用fork函数复制一份当前进程(父进程)的副本(子进程)。
- 父进程继续接受并处理客户端发来的命令,而子进程开始将内存中的数据写入到硬盘中的临时文件。
- 当子进程写入完所有数据后,会用该临时文件替换旧的RDB文件(默认是压缩过的)。
可以通过SAVE和BGSAVE命令来手动快照,前者是由主进程进行快照,会阻塞其它请求;后者是通过fork子进程来进行快照。
AOF
- AOF持久化策略是将发送到Redis端的每一条命令都记录下来,并保存到硬盘中的AOF文件,AOF文件和RDB文件位置相同。
AOF持久化方式是默认关闭的,通过配置文件中的appendonly参数设为YES开启。
AOF文件对于查询的操作不做记录。
AOF文件到磁盘的同步策略
appendfsync always
每次都同步(最安全,但也最慢)appendfsync everysec
每秒同步(默认的同步策略)appendfsync no
不主动同步,由操作系统来决定
文件默认先写到缓存中,系统每30秒同步一次,才是真正写入到磁盘
Read other posts