Redis能保证数据不丢失吗之AOF
我们都知道,Redis是一个基于内存的k-v数据库,既然是基于内存的,那么Redis如何保证数据不丢失?以及真的能做到数据的百分百不丢失吗?
为什么Redis数据需要持久化机制?
Redis的一个常用场景是缓存,通常缓存丢失的话,我们也可以从数据库中重新找回,那么为什么Redis还需要持久化机制呢?
试想一下,如果Redis没有持久化机制,一旦Redis宕机重启,所有的数据都丢失了,那么,就意味着所有的请求都会穿透缓存,打到数据库,这会给数据库造成较大的压力,让系统不稳定,因此持久化机制是一个必要的功能。
AOF日志
AOF是Redis实现持久化的一种手段,简单来说,就是Redis在执行完一条命令后,会将这条命令记录在AOF文件中,当需要恢复数据的时候,就重新执行一遍AOF文件中的命令。
从上面这段描述中,你可能会发现一个问题,如果在Redis执行完命令后,还未来得及写入AOF文件,此时Redis挂了,那数据不就丢失了吗?
是的,所以Redis没有办法保证数据百分百不丢失,这也是我们不建议完全使用Redis当数据库的一个原因。
但Redis可以保证大部分数据都不丢失,这就要看AOF的三种写回策略了:
- Always:每一次执行,都立马同步写磁盘,将命令写到AOF文件中
- Everysec:先将命令写到内存缓冲区中,1s后在将内存缓冲区中的内容同步