Redis(持久化一致性淘汰)
持久化 AOF 文件的内容是操作命令; RDB 文件的内容是二进制数据 AOF Redis 中 AOF 持久化功能默认是不开启的,需要我们修改 redis.conf Redis 每执行一条写操作命令,就把该命令以追加的方式写入到一个文件里 这保存写操作命令到日志的持久化方式,是 Redis 里的 AOF(Append Only File) 持久化功能,注意只会记录写操作命令,读操作命令是不会被记录的 Redis 是先执行写操作命令后,才将该命令记录到 AOF 日志里的 避免额外的检查开销 不会阻塞当前写操作命令的执行,因为当写操作命令执行成功后,才会将命令记录到 AOF 日志 风险: 执行写操作命令和记录日志是两个过程,那当 Redis 在还没来得及将命令写入到硬盘时,服务器发生宕机了,这个数据就会有丢失的风险 写操作命令执行成功后才记录到 AOF 日志,所以不会阻塞当前写操作命令的执行,但是可能会给「下一个」命令带来阻塞风险 执行过程: Redis 执行完写操作命令后,会将命令追加到 server.aof_buf 缓冲区; 通过 write() 系统调用,将 aof_buf 缓冲区的数据写入到 AOF 文件,此时数据并没有写入到硬盘,而是拷贝到了内核缓冲区 page cache,等待内核将数据写入硬盘; 具体内核缓冲区的数据什么时候写入到硬盘,由内核决定 写回硬盘策略: Always,「总是」,每次写操作命令执行完后,同步将 AOF 日志数据写回硬盘; Everysec,「每秒」,每次写操作命令执行完后,先将命令写入到 AOF 文件的内核缓冲区,每隔一秒将缓冲区里的内容写回到硬盘; No,不由 Redis 控制写回硬盘的时机,转交给操作系统控制写回的时机,也就是每次写操作命令执行完后,先将命令写入到 AOF 文件的内核缓冲区,再由操作系统决定何时将缓冲区内容写回硬盘 AOF重写机制 AOF 日志是一个文件,随着执行的写操作命令越来越多,文件的大小会越来越大 Redis 为了避免 AOF 文件越写越大,提供了 AOF 重写机制 机制是在重写时,读取当前数据库中的所有键值对,将每一个键值对用一条命令记录到「新的 AOF 文件」,等到全部记录完后,就将新的 AOF 文件替换掉现有的 AOF 文件 妙处在于:尽管某个键值对被多条写命令反复修改,最终也只需要根据这个「键值对」当前的最新状态,然后用一条命令去记录键值对 AOF后台重写...