小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
前边我们已经介绍了Redis
五种数据类型的命令与配置文件的基本配置,接下来让我们从理论和配置两个层面来揭开Redis
持久化的神秘面纱。
所谓持久化可以简单理解为将内存中的数据保存到硬盘上存储的过程。持久化之后的数据在系统重启或者宕机之后依然可以进行访问,保证了数据的安全性。
Redis
有两种持久化方案,一种是快照方式(SNAPSHOTTING
),简称RDB
;一种是只追加模式(APPEND ONLY MODE
),称为AOF。本文我们先来了解下 RDB 的相关配置。
RDB
RDB
为Redis DataBase
的缩写,是 Redis
默认的持久化方案。它能够在指定的时间间隔内将内存数据集快照(snapshot
)写入磁盘,恢复时将快照文件( dump.rdb
)读回内存。
我们先来扒一下配置文件中的SNAPSHOTTING
:
配置文件
save <seconds> <changes>
在给定的秒数内,如果对数据库执行的写入操作数达到设定的值,则将数据同步到数据文件。支持多个条件配合,Redis
默认配置文件中提供了三个条件:
save 900 1 //900s内有1个更改
save 300 10 //300s内有10个更改
save 60 10000 //60s内有10000次更改
复制代码
注意:若不想用RDB
方案,可以把 save ""
的注释打开,上边三个注释掉。
stop-writes-on-bgsave-error yes
当bgsave
出现错误时,Redis
是否停止执行写命令;
- 如果为
yes
,则当硬盘出现问题时,Redis
将停止接受写入操作,这样我们可以及时发现,避免数据的大量丢失; - 如果为
no
,则Redis
无视bgsave
的错误继续执行写命令。
如果已经设置了对
Redis
服务器的正确监视和持久性,即采用了其他手段发现和控制数据完整性,可能希望禁用此功能,以便即使在磁盘、权限等方面出现问题时,Redis
仍能正常工作。
注意:如果后台保存过程将再次开始工作,Redis
将自动允许再次写入。
rdbcompression yes
指定存储到本地数据库时是否压缩(Redis
采用LZF
压缩)数据,默认为yes
。如果为了节省CPU
时间,可以关闭该选项,但会导致数据库文件变得巨大。
rdbchecksum yes
从RDB
版本5
开始,在存储快照后,还可以使用CRC64
算法来进行数据校验,CRC64
校验放在文件的末尾。开启之后,保存和加载RDB
文件时会增加大约10%
的性能消耗,如果希望获取到最大的性能提升,可以关闭此功能。
禁用校验和创建的RDB
文件的校验和为零,这将告诉加载代码跳过检查。
dbfilename dump.rdb
指定本地数据库文件名,重启之后自动加载进内存,手动执行save
命令的话即刻生效。
大坑请注意:
flushall
、shutdown
命令都会清空并提交至dump.rdb
dir ./
指定本地数据库存放目录。
下文我们将讲述 RDB 方式的常见问题及优缺点分析。如果你有不同的意见或者更好的idea
,欢迎联系阿Q,添加阿Q可以加入技术交流群参与讨论呦!