在实际项目中,我们通常会把一些数据存放在redis中,如果redis因为某种原因宕机,那么存放在redis中的数据会丢失么?
显然是不会丢失的,redis默认情况下是有持久化机制,和大部分缓存框架一样都会有持久化机制和淘汰策略,比如ehcache等;也有单纯的缓存框架,比如membercache是没有持久化机制的,市面上很少用到。
而redis实现持久化机制有两种分别是RDB、AOF,默认是使用RDB,两种机制可以同时使用,具体看项目需求。
首先先了解一下全量同步和增量同步:
全量同步与增量同步
- 全量同步:就是每天定时(避开高峰期)或者采用一种周期实现将数据拷贝到一个地方,也就是Rdb存储。
缺点:频率不是很大,可能会造成数据丢失;
优点:对服务器压力小;
- 增量同步:采用行为操作对数据实现同步(就是进行写的操作),也就是AOF。
缺点:频率非常高,对服务器同步压力非常大;
优点:可以保证数据不丢失;
- 全量与增量的区别:增量同步比全量同步更加消耗服务器的内存,但是能够更加的保证数据的同步。
redis持久性机制
Redis提供了两种持久化的机制,分别为RDB、AOF实现;
RDB采用定时 (全量同步) 持久化机制,但是服务器因为某种原因宕机后可能数据会丢失;
AOF是基于数据日志操作实现的持久化,所以AOF采用增量同步方案。
RDB持久化机制
AOF持久化机制
RDB与AOF同时使用,那么哪种方式优先使用?
优先使用AOF,其次使用RDB,因为RDB属于全量同步,可能会有一些短暂的数据没有同步过来;AOF属于增量同步,是把每次客户端的行为操作都记录下来,所以优先使用AOF; redis官方文档说明1G左右的内存,恢复差不多要20s左右,速度还是很快的。