Q:为什么Redis要持久化?
A:Redis的高性能是因为其使用了内存来储存数据,而RAM有易失性,所以在服务器宕机或断电后会导致Redis储存在其中的数据丢失。Redis也提供了持久化数据的方案。
Q:为什么我不设置持久化也能在重新打开Redis服务时恢复之前的数据?
A:因为Redis已默认启用了一种持久化方案。
下面是两种方式的介绍
(conf文件里对应的配置部分有着对应的参数解释)
RDB方式(Redis database)
经过一定时间后,将内存数据的快照写入到磁盘中
优点:
- 备份里只包含一个文件,便于备份的归档管理
- 节省磁盘空间
- 数据库恢复速度快
缺点:
- 数据完整性问题(系统有可能在进行持久化前发生宕机)
- 速度下降问题(数据量过大时可能导致服务器停顿)
如何启用:
- 打开redis的conf文件
- windows下为redis.windows.conf
- Linux下为redis.conf
找到SNAPSHOTTING下的# like in the following ... # ... # save "" save 900 1 (900秒内至少有1条key发生变化,就写一次快照,下二同理) save 300 10 save 60 10000
AOF方式(Append only file)
以日志的形式记录数据库处理的每一个操作,在Redis服务重启时将日志读入,执行每一条命令,重建数据库。由于是追加的形式写入到日志文件里,当文件大小超过了设置的阈值,会压缩日志文件,保留仅可以恢复的日志。
优点:
- 备份机制更为安全
- 可读性高的日志文件,便于恢复,处理错误等
缺点:
- 相比RDB的方式对磁盘的开销更大
- 备份速度较慢(备份频率相对更高,也更安全)
如何启用:
打开redis的conf文件
- windows下为redis.windows.conf
- Linux下为redis.conf
找到APPEND ONLY MODE下的# AOF and RDB ... # ... # Please ... appendonly no (AOF默认未启用,要使用则将no改为yes)
# The name ... appendfilename "appendonly.aof" (这是AOF产生的日志文件的文件名) (与redis-server.exe等文件存于同一个目录下)
# The fsyn() call ... # ... # If unsure ... # appendfsync always(每次更新同步更新日志) appendfsync everysec(默认给你选这个) # appendfsync no(不同步) (要打开哪个就去掉之前的#号)
# Specify a percentage of zero in order to disable the automatic AOF # rewrite feature. auto-aof-rewrite-percentage 100 (超出了这个百分比就重写) auto-aof-rewrite-min-size 64mb (重写出的文件不应小于64mb,和上面的条件共同控制是否进行rewrite这个操作)
RDB和AOF哪个好
- 官方推荐都启用
- 对数据不敏感,单独用RDB
- 不建议单独使用AOF
- 若作为纯缓存使用,可以都不开启
官方的文档:Redis Persistence
参考的博客:介绍Redis的各种用途以及使用场景