为了避免内存中数据丢失,redis提供了对持久化的支持,redis提供了RDB和AOF两种不同的数据持久化方式。
- RDB:快照存储持久化方式,将Redis某一时刻的内存数据保存到硬盘的文件中,默认文件名为dump.rdb。当redis服务器启动时会重新加载dump.rdb文件的数据到内存中。
过程为:
- 生成临时rdb文件并写入数据
- 完成数据写入并用临时文件代替正式的rdb文件
- 删除原来的rdb文件。
方式有:
-
- save命令:同步进行持久化,服务器会阻塞所有请求,直至数据同步完成。
- bgsave命令:异步进行持久化,redis服务器主进程forks一个子进程来数据同步。
- 服务器配置自动触发,在配置文件redis.conf里面配置 save 900 1 ;900秒内至少达到一条写命令。如果设置触发时间太短会容易频繁写入rdb文件影响服务器进程,时间太长又会造成数据丢失
优缺点:
-
- 文件恢复数据比较快
- rdb文件紧凑,适合数据备份
- 对redis服务器性能影响较小
- 服务器宕机可能会造成某个时段的数据丢失(数据没来得及同步)
- save命令会造成服务器阻塞
- bgsave命令forks子进程时如果数据量过大也会发生阻塞,也会耗费内存。
- AOF(Append-only file):记录客户端对服务器的每一次写操作,并将写操作保存到aof文件末尾,redis服务器重启时会加载aof文件的命令恢复数据。
写入策略(通过appendsync选项指定):
-
- always:每一个写操作都保存到aof文件里,该策略很安全,但每个写都有IO操作,所以比较慢。
- everysec:默认写入策略,每秒写一次aof文件,最多丢失1s数据。
- no:redis服务器不写入aof,操作系统来处理什么时候写入aof,更快但是不安全。
优缺点:
-
- 对服务器性能影响较小,速度更快,消耗内存较少。
- 日志文件太大
- 回复数据的书读比RDB慢。
- AOF与RDB的对比
以上参考 https://mp.weixin.qq.com/s/ij67XYJgYK2kYrAlSDz3sw