在实际项目中,我们通常会把一些数据存放在redis中,如果redis因为某种原因宕机,那么存放在redis中的数据会丢失么?
显然是不会丢失的,redis默认情况下是有持久化机制,和大部分缓存框架一样都会有持久化机制和淘汰策略,比如ehcache等;也有单纯的缓存框架,比如membercache是没有持久化机制的,市面上很少用到。
而redis实现持久化机制有两种分别是RDB、AOF,默认是使用RDB,两种机制可以同时使用,具体看项目需求。




Redis fullshall后没数据 redis数据不丢失_持久化


首先先了解一下全量同步和增量同步:

全量同步与增量同步

  • 全量同步:就是每天定时(避开高峰期)或者采用一种周期实现将数据拷贝到一个地方,也就是Rdb存储。

缺点:频率不是很大,可能会造成数据丢失;

优点:对服务器压力小;

  • 增量同步:采用行为操作对数据实现同步(就是进行写的操作),也就是AOF。

缺点:频率非常高,对服务器同步压力非常大;

优点:可以保证数据不丢失;

  • 全量与增量的区别:增量同步比全量同步更加消耗服务器的内存,但是能够更加的保证数据的同步。

redis持久性机制

Redis提供了两种持久化的机制,分别为RDB、AOF实现;

RDB采用定时 (全量同步) 持久化机制,但是服务器因为某种原因宕机后可能数据会丢失;

AOF是基于数据日志操作实现的持久化,所以AOF采用增量同步方案。

RDB持久化机制

AOF持久化机制

RDB与AOF同时使用,那么哪种方式优先使用?

优先使用AOF,其次使用RDB,因为RDB属于全量同步,可能会有一些短暂的数据没有同步过来;AOF属于增量同步,是把每次客户端的行为操作都记录下来,所以优先使用AOF; redis官方文档说明1G左右的内存,恢复差不多要20s左右,速度还是很快的。