持久化可以理解为存储,就是将数据存储到一个不会丢失的地方,如果把数据放在内存中,电脑关闭或重启数据就会丢失,所以放在内存中的数据不是持久化的,而放在磁盘就算是一种持久化。
Redis的数据存储在内存中,内存是瞬时的,如果 linux宕机或重启,又或者 Redis崩溃或重启,所有的内存数据都会丢失,为解决这个问题, Redis提供两种机制对数据进行持久化存储,便于发生故障后能迅速恢复数据。
Redis Database RDB),就是在指定的时间间隔内将内存中的数据集快照写入磁盘,数据恢复时将快照文件直接再读到内存。
RDB保存了在某个时间点的数据集(全部数据)。存储在一个二进制文件中,只有一个文件。默认是 dump.rdb。 RDB技术非常适合做备份,可以保存最近一个小时,一天,一个月的全部数据。保存数据是在单独的进程中写文件,不影响 Redis的正常使用。 RDB恢复数据时比其他 AOF速度快。
RDB方式的数据持久化,仅需在 redis.conf文件中配置即可 ,默认配置是启用的。
在配置文件 redis.conf中搜索 SNAPSHOTTING,查找在注释开始和结束之间的关于 RDB的配置说明。配 SNAPSHOTTING置地方有三处。
对Redis 进行设置 让它在 “ N 秒内数据集至少有 M 个 key改动 ”这一条件被满足时自动保存一次数据集。
配置格式:save <seconds> <changes> // 即在多少秒的时间范围类被改变多少次 满足这个条件后Redis会自动将数据持久化 save 900 1 // 900秒内如果只有一个key被改变 则进行数据持久化 save 300 10 save 60 10000
② dirfilename:设置RDB的文件名,默认的文件名称为dump.rdb
②编辑redis.conf增加save配置,修改保存的文件名等。vim redis.conf
把原来默认的dump.rdb删除,保存redis.conf的修改后,启动redis
1)会丢失最后一次快照以后更改的数据,如果你能容忍一定数据的丢失,那么rdb是不错的选择;否则不会是好的选择
2)由于需要进程操作磁盘,RDB会分出一个子进程。如果你的redis数据库很大的话,子进程会占用较多的时间,并且可能会影响redis暂停服务一段时间(millisecond 级别),如果你的数据库超级大且你的服务器CPU比较若的话,暂停时间可能会更久。