Redis持久化

454 阅读3分钟

Redis的持久化机制

Redis安装及常用命令已经详细讲解了Redis这款菲关系型数据库,其中Redis比起其他非关系型数据库的优势之一,就是Redis支持数据的持久化机制。 Redis是一个内存数据库,Redis数据库中的所有数据都是以缓存的形式存储在内存中的,当redis服务器重启,或者电脑重启,数据会丢失。 为了解决这个问题,我们可以将redis内存中的数据持久化到硬盘中。

Redis持久化机制有两种,分别是RDB和AOF。

  • RDB:在指定的时间间隔内,如果数据库内的数据达到改变次数,就对数据库进行快照。
  • AOF:记录每次对服务器的写操作,当服务器重启时会读取这些命令来恢复数据库的原始数据。

RDB

默认方式,不需要进行配置,Redis默认就使用这种持久化机制,在一定的时间间隔中,检测key的变化情况,然后持久化数据。 Redis目录下有一个redis.windows.conf文件,其中有这么一段配置:

save 900 1		#15分钟内有1个key值被改变
save 300 10		#5分钟内有10个key值被改变
save 60 10000	#1分钟内有10000个key值被改变

当Redis数据库满足配置中的要求的时候,Redis服务器就会自动进行持久化,然后会在Redis的目录下生成一个名为dump.rdb的文件。 当服务器关闭,下一次重启服务器的时候,服务器就会自动读取dump.rdb中的内容,恢复数据库的原始数据。

RDB的优点

  • RDB 是一个非常紧凑(compact)的文件,它保存了 Redis 在某个时间点上的数据集。
  • 这种文件非常适合用于进行备份,非常适用于灾难恢复。
  • RDB 可以最大化 Redis 的性能:父进程在保存 RDB 文件时唯一要做的就是 fork 出一个子进程,然后这个子进程就会处理接下来的所有保存工作,父进程无须执行任何磁盘 I/O 操作。RDB 在恢复大数据集时的速度比 AOF 的恢复速度要快。

RDB的缺点

  • RDB操作的时间粒度比较大,如果服务器发生故障,同时Redis的数据非常巨大,那么即便是1秒钟也可能会丢失大量的数据。

AOF

日志记录的方式,可以记录每一条命令的操作,可以每一次命令操作后,持久化数据(消耗性能)。 在redis.windows.conf文件中,有一个appendonly属性,默认配置为no,如果需要使用AOF持久化机制,那么将appendonly修改为yes即可。 同时还应该修改appendfsync属性,设置AOF持久化策略。

appendonly no		#关闭AOF
#appendonly yes		#开启AOF
# appendfsync always		#每一次操作都进行持久化
appendfsync everysec		#每隔一秒进行一次持久化
# appendfsync no			#不进行持久化

如果AOF持久化成功,那么会在Redis目录下生成一个appendonly.aof的文件。该文件作用与dump.rdb相似。

AOF的优点

  • AOF 的默认策略为每秒钟 fsync 一次,在这种配置下,Redis 仍然可以保持良好的性能,并且就算发生故障停机,也最多只会丢失一秒钟的数据( fsync 会在后台线程执行,所以主线程可以继续努力地处理命令请求)。

AOF的缺点

  • 对于相同的数据集来说,AOF 文件的体积通常要大于 RDB 文件的体积。

开启持久化的方式

打开cmd命令提示符窗口,进入Redis目录下。

cd E:\Program Files\Redis-x64-3.2.100

启动Redis服务器,并加载配置文件

redis-server.exe redis.windows.conf