Redis的强劲性能很大程度上是由于它所有的数据都存储在内存中,当然如果redis重启或者服务器故障导致redis重启,所有存储在内存中的数据就会丢失。但是在某些情况下,我们希望Redis在重启后能够保证数据不会丢失。
-
将redis作为nosql数据库使用。
-
将Redis作为高效缓存服务器,缓存被击穿后对后端数据库层面的瞬时压力是特别大的,所有缓存同时失效可能会导致雪崩。
这时我们希望Redis能将数据从内存中以某种形式同步到硬盘上,使得重启后可以根据硬盘中的记录来恢复数据。
Redis支持两种方式的持久化,一种是RDB方式、另一种是AOF(append-only-file)方式,两种持久化方式可以单独使用其中一种,也可以将这两种方式结合使用。
- RDB:根据指定的规则“定时”将内存中的数据存储在硬盘上,
- AOF:每次执行命令后将命令本身记录下来。
RDB模式
RDB的持久化方式是通过快照(snapshotting)完成的,它是Redis默认的持久化方式,配置如下。
# save 3600 1
# save 300 100
# save 60 10000
Redis允许用户自定义快照条件,当符合快照条件时,Redis会自动执行快照操作。快照的条件可以由用户在配置文件中配置。配置格式如下
save <seconds> <changes>
第一个参数是时间窗口,第二个是键的个数,也就是说,在第一个时间参数配置范围内被更改的键的个数大于后面的changes时,即符合快照条件。当触发条件时,Redis会自动将内存中的数据生成一份副本并存储在磁盘上,
这个过程称之为“快照”,除了上述规则之外,还有以下几种方式生成快照。
- 根据配置规则进行自动快照
- 用户执行SAVE或者GBSAVE命令
- 执行FLUSHALL命令
- 执行复制(replication)时
根据配置规则进行自动快照
- 修改redis.conf文件,表示5秒内,有一个key发生变化,就会生成rdb文件。
save 5 1 # 表示3600s以内至少发生1个key变化(新增、修改、删除),则重写rdb文件
save 300 100
save 60 10000
-
修改文件存储路径
dir /data/program/redis/bin
-
其他参数配置说明
参数 说明 dir rdb文件默认在启动目录下(相对路径) config get dir
获取dbfilename 文件名称 rdbcompression 开启压缩可以节省存储空间,但是会消耗一些CPU的计算时间,默认开启 rdbchecksum 使用CRC64算法来进行数据校验,但是这样做会增加大约10%的性能消耗,如果希望