Redis——持久化机制(RDB和AOF)

    redis将所有数据保存在内存中,为了记录数据和操作需要持久化机制保存到磁盘。redis中用到了两种方式:RDB和AOF。持久化有什么用?重启后进行数据恢复。redis在进行数据恢复的时候都会读取rdb或者aof文件,将数据重新加载到内存。

一、RDB也叫snapshotting方式

1、机制

    以快照的方式将内存中的数据写入二进制文件中,在磁盘中会生成一个.rdb的文件。这种方式可以设置每个多长时间进行一次快照,即按照一定的策略周期性的持久化。注意:每次都是将内存中的数据完整的写入磁盘,不是增量的更新。它是异步的。

   工作原理简单介绍一下:当redis需要做持久化时,redis会fork一个子进程;子进程将数据写到磁盘上一个临时RDB文件中;当子进程完成写临时文件后,将原来的RDB替换掉,这样的好处就是可以copy-on-write(实时复制)。

2.存在的问题

   如果redis宕机了,最近的数据会丢失。当业务量很大时,丢失的数据会很多。

二、AOF(append-only-file)

1.机制

   redis每次将写的命令追加到.aof文件中,实现了全程持久化。redis重启后执行.aof文件进行”重放“恢复数据。

2.存在的问题

    因为每次写操作都要追加,所以会造成文件中对某一数据的操作好很多条,但其实只是最后一条操作才有用。这样随着时间增加,文件会越来越大。

3.如何解决?

    为了压缩aof持久化文件,redis提供了bgrewriteaof命令。收到此命令后,redis将使用与快照类似的方式将内存中的数据以命令的方式保存到临时文件,最后替换原来的文件,来控制aof文件的增长。

三、总结

     redis的持久化机制保证了内存中的数据同步到磁盘,重启时能恢复数据库。

猜你喜欢

转载自blog.csdn.net/qq_37612755/article/details/85099564