redis持久化RDB配置

RDB = Redis DataBase

RDB是什么:

在指定的时间间隔内将内存中的数据集快照写入磁盘

也就是行话讲得Snapshot快照,它回复时是将快照文件直接读到内存中

Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,在用这个临时文件替换上次持久化好的文件.

整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能

如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效.

RDB的缺点是最好一次持久化后的数据可能丢失

Fork

fork的作用是复制一个与当前进程一样的进程.新进程的所有数据(变量/环境变量/程序计数器等)数值都和原进程一致,但是是一个全新的进程,并作为元进程的子进程.

RDB保存的是dump.rdb文件

配置保存策略

save [seconds] [changes]

# 如果要禁用功能则使用: 
save ""

上面的配置什么意思呢?

例如:

save 900 1
# 如果在900秒内有1次改动(增删改),则保存到硬盘中

save 300 10 
# 如果在300秒内有10次改动(增删改),则保存到硬盘中

save 60 10000
# 如果在60秒内有10000次改动(增删改),则保存到硬盘中

多个策略可以并用,也就是说可以配置多个save...

手动执行保存到硬盘的操作

  • save 阻塞操作,其他操作不能执行
# 直接执行save命令
# 这是一个阻塞操作
save
# 就一个save,直接将内存中的数据保存到硬盘中
# 如果保存的一个数据非常重要,可以直接这么使用
  • bgsave 后台异步执行保存快照操作,同时还可以相应客户端请求
bgsave
  • lastsave查看最后一次成功执行快照的时间
lastsave
# 返回是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。
# 就是标准的Unix时间戳

  • 指定存储至本地数据库时是否压缩数据,默认为yes, Redus采用LZF压缩,如果为了节省cpu时间,可以关闭该选项,但会导致数据库文件变得巨大
rdbcompression yes
# 还是压缩比较好
  • 指定本地数据库文件名,默认值为dump.rdb
    根据save的策略,redis的数据包保存在这个文件中
    ,在关闭数据库的时候也会强制保存一次
dbfilename dump.rdb
  • 指定本地数据库存放目录
dir  ./
# 上面这个./是个变动的值,程序在哪个路径敲命令启动的,那么就是在哪个路径
  • 当写入数据到硬盘出错,则停止保存到硬盘
stop-writes-on-bgsave-error yes
  • 存储快照后,进行数据校验
rdchecksum yes
# 在存储快照后,可以让redis使用CRC64算法来进行数据校验
# 但是会增加大约10%的性能消耗
# 我觉得10%不算什么

如何恢复硬盘中的数据到内存中?

  • 直接将dump.rdb文件移动到redis安装目录,并启动redis即可
  • //需要测试下,是不是移动到 dir的目录也行

RDB优势

  • 适合大规模的数据恢复

RDB劣势

  • 数据完整性和一致性不高
  • 在备份的时候redis意外爆掉,可能会丢失最后一次快照后的修改
  • fork的时候,内存中数据被克隆了一份,需要考虑内存的使用
  • fork过程比较耗时,可能响应客户端的时间不能达到毫秒级

不怎么重要的内容

  • 动态停止RDB保存规则
redis-cli config set save ""

你可能感兴趣的:(redis持久化RDB配置)