一、持久化
持久化的意义
Redis是基于内存的NoSQL数据库,读写速度自然快,但内存是瞬时的,在redis服务关闭或重启之后,redis存放在内存的数据就会丢失,为了解决这个问题,redis提供了两种持久化方式,以便在发生故障后恢复数据。
持久化的选择
redis提供了两种不同的持久化方式来将数据存储到硬盘中。一种是快照方式(也叫RDB方式),它可以将莫一时刻存在于redis中的所有数据存储到硬盘;另一种叫只追加文件(AOF方式),它会定时的复制redis执行的所有写命令到硬盘。这两种持久化方式各有千秋,既可以同时使用,也可以独立使用,在某些情况下甚至可以两种都不使用。
RDB方式
RDB方式也称快照方式,通过创建快照来保存某个时间点上的数据副本(.rdb)到硬盘。在重启服务器后,redis会加载这个rdb文件来还原数据。先来看一下rdb持久化配置。
vi redis.conf
打开redis的配置文件,找到SNAPSHOTTING部分,发现如下内容:
save 900 1
save 300 10
save 60 10000
……
dbfilename dump.rdb
dir ./
说明:
- save seconds changes:表示在seconds秒后,如果有不少与changes个key发生改变,则保存一次快照。可以看到,rdb持久化默认是开启的,并且配置了三个save选项,如果想要关闭rdb持久化,将所有的save注释掉就好了
- dbfilename:rdb文件名
- dir:rdb文件存放路径
创建快照
BGSAVE:
BGSAVE命令可以用于创建一个快照,在redis接收到BGSAVE命令后会fork出一个子进程,子进程负责将快照写入硬盘,而父进程则继续处理命令请求。需要注意的是redis在创建子进程时会阻塞父进程,时间长短与redis占用的内存大小成正比。
除了手动的调用BGSAVE命令外,BGSAVE命令的触发条件有如下两种:
- 用户配置了save选项,从redis最近一次创建快照开始算起&#x