Redis3-RDB快照

1.如何生成快照

1.save

主线程来执行,但生成快照时间比较久,会阻塞主线程,导致写命令无法执行

2.bgsave

子线程来执行,所以不会阻塞主线程,写命令可以执行

redis快照特点:

全量快照,会把所有的数据都存到磁盘中,所以执行快照太频繁,会降低性能。但执行快照太少,可能会丢失很多数据。

一般设置5分钟保存一次快照

2.bgsave的时候,数据可以修改吗

可以

因为COW

快照,顾名思义,当前时刻的照片,所以快照保存的是当时的数据,主线程修改数据可复制一份它要修改的数据,然后在复制的数据上进行修改。子线程仍然复制之前的数据。

3.混合持久化

发生在 AOF 日志重写过程

AOF 重写日志时,fork出来的 重写子进程 会先将与主线程共享的内存数据以RDB的方式写入到新的AOF文件,然后主线程处理的操作命令仍然会被记录到AOF重写缓冲区里面,重写缓冲区里的增量数据会以AOF的方式写入到AOF文件中,写完后通知主进程将新的 含有 RDB格式和AOF格式的AOF文件替换掉就的AOF文件。

新的AOF文件,前半部分是RDB格式的全量数据,后半部分是AOF的增量数据

好处,重启Redis进行数据加载的时候,前半部分是RDB快照,数据恢复快。后面是重写期间,记录的主线程操作命令,AOF内容,使得数据更少丢失。

你可能感兴趣的:(redis,缓存,java)