江苏省建设工程质量监督站网站,泉州pc网站开发,网站建设开发教程,镇江网站优化seo专题3-AOF日志#xff1a;宕机了#xff0c;Redis如何避免数据丢失
因为redis的数据是存在内存中的#xff0c;一旦服务器宕机#xff0c;内存中的数据会全部丢失。
AOF#xff1a;redis先执行命令#xff0c;把数据写入内存#xff0c;然后才记录日志。
AOF优点宕机了Redis如何避免数据丢失
因为redis的数据是存在内存中的一旦服务器宕机内存中的数据会全部丢失。
AOFredis先执行命令把数据写入内存然后才记录日志。
AOF优点在命令执行后记录日志所以不会阻塞当前的写操作。
AOF缺点如果刚执行完一个命令还没有来得及记录日志就宕机了那么这个命令和相应的数据就有丢失的风险。 其次。虽然避免了当前命令的阻塞但是可能会给下一个操作带来阻塞的风险。因为AOF日志也是在主线程中执行如果把日志写入磁盘时磁盘写压力大就会导致写盘很慢进而后续的操作就无法执行
为了解决AOF存在的问题有三种写回策略
Always同步写回每个写命令执行完立马同步地将日志写回磁盘-?影响主线程性能
Everysec每秒写回每个写命令执行完只是先把日志写到 AOF 文件的内存缓冲区每隔一秒把缓冲区中的内容写入磁盘 -》可能会丢失上一秒的数据
No操作系统控制的写回每个写命令执行完只是先把日志写到 AOF 文件的内存缓冲区由操作系统决定何时将缓冲区内容写回磁盘。 -》可能导致数据丢失 AOF重写机制
为了防止AOF文件过大的性能问题。
为什么会有性能问题
文件系统的限制无法保存过大的文件如果文件过大往里面的追加记录效率会变低如果发生宕机AOF中的命令要被一个个重新执行如果日志文件过大整个恢复过程非常缓慢
AOF重写机制
可以减少文件大小因为AOF文件会记录每一行的数据而AOF重写只会记录最新的数据。
重写过程
一个拷贝两处日志
一个拷贝
每次重写时主线程fork后台的bgrewriteaof子线程并且把主线程内存拷贝一份给bgrewrieaof子线程然后bgrewrieaof子线程在不影响主线程的状况下逐一把拷贝的数据携程操作。
两处日志
第一处日志是正在使用的AOF日志。
第二处日志是AOF重写日志。 总结来说每次 AOF 重写时Redis 会先执行一个内存拷贝用于重写然后使用两个日志保证在重写过程中新写入的数据不会丢失。而且因为 Redis 采用额外的线程进行数据重写所以这个过程并不会阻塞主线程。