详解Redis持久化(RDB和AOF)
什么是Redis持久化?Redis读写速度快、性能优越是因为它将所有数据存在了内存中,然而,当Redis进程退出或重启后,所有数据就会丢失。所以我们希望Redis能保存数据到硬盘中,在Redis服务重启之后,原来的数据能够恢复,这个过程就叫持久化。
Redis持久化的两种方式?RDB和AOF
AOF:会将每次执行的命令及时保存到硬盘中,实时性更好,丢失的数据更少
RDB:会根据指定的规则定时将内存中的数据保存到硬盘中。
通常两种方式结合使用,下面详细介绍RDB和AOF
AOF
Append Only File,AOF会保存服务器执行的所有写操作到日志文件中,在服务重启以后,会执行这些命令来恢复数据。
日志文件默认为appendonly.aof,Redis以Redis协议格式将命令保存至aof日志文件末尾,aof文件还会被重写,使aof文件的体积不会大于保存数据集状态所需要的实际大小
默认情况下,aof没有被开启。需要在redis.conf开启
appendonlyyes
日志文件名
appendfilename"appendonly.aof"
日志文件所在目录(RDB日志文件也是在这里)
dir ./
fsync持久化策略
appendfsync everysec
always:命令写入aof_buf后立即调用系统fsync操作同步到AOF文件,fsync完成后线程返回。这种情况下,每次有写命令都要同步到AOF文件,硬盘IO成为性能瓶颈,Redis只能支持大约几百TPS写入,严重降低了Redis的性能;即便是使用固态硬盘(SSD),每秒大约也只能处理几万个命令,而且会大大降低SSD的寿命。no:命令写入aof_buf后调用系统write操作,不对AOF文件做fsync同步;同步由操作系统负责,通常同步周期为30秒。这种情况下,文件同步的时间不可控,且缓冲区中堆积的数据会很多,数据安全性无法保证。everysec:命令写入aof_buf后调用系统write操作,write完成后线程返回;fsync同步文件操作由专门的线程每秒调用一次。everysec是前述两种策略的折中,是性能和数据安全性的平衡,因此是Redis的默认配置,也是我们推荐的配置。 bd
页:
[1]