Redis数据持久化在实践中有用吗?
Redis 是一个内存数据库。如果服务器关闭,数据将会丢失。
将Redis数据保存到磁盘有两种方式:
- AOF(仅追加文件)
- RDB(Redis数据库)
𝗔𝗢𝗙
与预写日志不同,Redis AOF 日志在命令运行后写入。 Redis 首先运行命令来更改内存中的数据。然后它将命令写入日志文件。 AOF 记录命令而不是数据。这种更简单的设计使恢复数据变得更容易。此外,AOF 会在命令在内存中执行后对其进行记录。所以它不会阻塞当前的写操作。
𝗥𝗗𝗕
AOF 的局限性在于它保存的是命令而不是数据。当我们使用AOF日志恢复数据时,必须扫描整个日志。当日志较大时,Redis 需要更长的时间来恢复。所以Redis提供了另一种保存数据的方式——RDB。
RDB 在特定时间记录数据快照。当服务器需要恢复时,数据快照可以直接加载到内存中,实现快速恢复。
步骤1:主线程fork出“bgsave”子进程,该子进程共享所有内存数据。 “bgsave”从主线程读取数据并将其写入RDB文件。
步骤2和3:如果主线程更改了数据,则会创建一个副本。
步骤4和5:然后主线程对副本进行操作。同时,“bgsave”子进程继续将数据写入RDB文件。
𝗠𝘆𝗢𝗽𝗶𝗻𝗶𝗼𝗻
从磁盘恢复需要很长时间。对于大多数使用 Redis 作为缓存的用途,使用 Redis 复制并在主 Redis 服务器发生灾难性故障时提升副本会更好。