持久化有效的避免因进程退出造成的数据丢失问题,当下次重启时利用持久化文件即可实现数据恢复,redis持久化方式有RDB和AOF两种。
1 RDB
RDB持久化是把当前进程数据生成快照保存到硬盘过程,可以手动触发也可以自动触发。
save命令: 基本没人用了,会阻塞当前Redis服务器,直到RDB过程完成为止。
bgsave: redis执行fork操作子进程,持久化任务由子进程负责,阻塞只发生在fork阶段,时间很短。
RDB生成的数据文件保存在 配置文件的dir目录下,文件名也可以修改(默认dump.rdb)
2 AOF
AOF以独立的日志记录方式记录每次写命令,重启之后再重新执行AOF文件的命令,即可以达到数据恢复的目的,AOF可以解决数据持久化的实时性,是redis主流的持久化方式。
开启AOF,并指定AOF文件名(默认是appendonly.aof),文件保存路径和RDB一样 都在dir之下。
AOF文件同步策略,由配置文件中的appendfsync参数控制,值有下列三个选项
always: 每次写入都要同步AOF文件(不建议配置,会阻碍redis性能)
everysec: 建议的配置(也是默认的配置),理论上最多丢失一秒内数据
no: 不建议配置,数据得不到安全性保证
从写机制
时间长了,命令会越来越多,aof文件也就会越来越大,重写机制就是为了解决这个问题的,文件变小的原因1:如set a 11,set a 22,只保留最终的命令,即set a 22, 2: 合并命令,如:rpush key a, rpush key b,会被合并为 rpush key a b。
重写触发时机
redis重启后数据文件的选择如下