uov 发表于 2022-3-15 19:35:26

详解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的默认配置,也是我们推荐的配置。

npuer 发表于 2022-10-19 21:59:27

bd
页: [1]
查看完整版本: 详解Redis持久化(RDB和AOF)