Redis 持久化的两种方式

一:RBD

  RBD方式是通过快照(snapshotting)完成的,当符合一定的条件时redis会自动将内存中所有数据生成一份副本并保存在硬盘上,这个过程即为快照。redis会在一下几种情况下对数据进行快照:

  • 根据配置规则自动进行快照
  • 用户执行save或者bgsave
  • 执行flushall命令
  • 执行复制操作

1 根据配置规则进行自动快照
  redisyunxu允许用户自定义快照,当符合条件时,redis会自动执行快照操作。配置命令如下:save m n 其中m为时间窗口,n为改动的键的个数。
例如:

save 900  1    (每900秒有一个或者一个以上的键被改动)
save 300 10    (每300秒有至少十个键被修改)
save 60 10000   (每60秒至少有10000个键被修改)

  每条快照条件占一行,并且以save开头。同时可以存在多个条件,条件之间是或的关系。

2 用户执行save或者bgsave命令
  除了让redis自动进行快照外,当进行服务器重启、手动迁移以及备份我们也需要手动快照来操作。redis提供了两个命令来操作。
  save命令:快照执行过程中会阻塞所有来自客户端的请求。当数据库中的数据比较多时,这一过程会导致redis较长时间不响应,所以尽量避免在生产环境中使用这一命令。
  bgsave命令:在后台异步进行快照操作,快照的同时服务器还可以继续响应来自客户端的请求。执行完该命令后,redis会立刻返回OK表示开始执行快照操作,如果想知道快照是否完成,可以通过lastsave命令来获取最近一次成功执行快照的时间。

3 执行flushall命令
  当执行flushall命令时,redis会清除数据库中的所有数据。需要注意的是,不论清空数据库的过程是否触发了自动快照条件,只要自动快照不为空,redis就会执行一次快照操作。当没有定义自动快照条件时,执行 该命令则不会进行RDB快照文件。

4 快照原理
  redis会默认将快照文件存储在redis当前进程的工作目录的dump.rdb文件中,可以通过配置dir和dbfilename两个参数分别指定快照文件的存储路径和文件名。快照过程如下:
(1)redis 使用fork函数复制一份当前(父进程)的副本(子进程)。
(2)父进程继续接收并处理客户端发来的命令,而子进程将内存中的数据写入硬盘的临时文件。
(3)当子进程写完所有数据后会用该临时文件替换旧的RDB文件,至此一次快照过程完成。
  RDB方式持久化,一旦redis异常退出,就会丢失最后一次快照以后更改的所有数据。

二:AOF
  AOF会将redis执行的煤一条命令都追加到硬盘文件中,这一过程会降低redis的性能,但是大部分情况下都是可以接受的。默认情况下AOF是不开启的,设置参数appendonly yes。AOF文件的保存位置和RDB文件位置相同,都是通过dir参数设置的,默认的文件名是appedonly.aof,可以通过appendfilename参数修改:

 appendfilename  appendonly.aof

AOF优化:希望redis优化AOF文件,删除重复的数据的无用命令,只保留有用的命令。配置参数:

auto-aof-rewrite-percentage 100
auto-aof-rewrite-pewrite-min-size 64mb

auto-aof-rewrite-percentage 参数的意义是目前的aof文件大小超过上一次重写的aof文件大小的本分之多少再次进行重写。auto-aof-rewrite-pewrite-min-size参数限制了允许重写的最小文件大小。
  也可以使用bgrewriteaof命令手动执行aof重写。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值