redis持久化

1:reids持久化

reids支持两种方式的持久化,一种是RDB方式,另外一种是AOF方式。

RDB方式会根据指定的规则“定时”将内存的中数据存储在硬盘上,而AOF方式在每次执行命令后将命令本身记录下来。两种持久化方式可以单独使用其中一种,但更多情况下是两者结合使用。

2:RDB方式

RDB方式的持久化是通过快照完成的,当符合一定条件时Redis会自动将内存中的所有数据生成一份副本并存储在硬盘上,这个过程称为“快照”。

Redis会在以下几种情况下对数据进行快照

  1. 根据配置规则进行自动快照
  2. 用户执行SAVE或BGSAVE命令
  3. 执行FLUSHALL命令
  4. 执行复制时
1:根据配置规则进行自动快照

Redis允许用户自定义快照条件,当符合快照条件时,Redis会自动执行快照操作。

进行快照条件可以由用户在配置文件中定义,由两个参数构成:时间窗口M和改动的键的个数N。每当时间M内被更改的键的个数大于N时,即符合快照条件。

例如:

save 900 1   //在900s内有一个或一个以上的键被更改时就进行快照
save 300 10
save 60 10000
2:用户执行SAVE或BGSAVE操作

除了Redis自动进行快照外,当服务器重启,手动迁移以及备份时我们也会手动执行快照操作

  1. SAVE命令

    当执行SAVE命令时,Redis同步地执行快照操作,在快照执行的过程中会阻塞所有来自客户端的操作。当数据较多时,这一过程会导致Redis长时间不响应

  2. BGSAVE命令

    需要手动执行快照操作时推荐使用BGSAVE命令。BGSAVE可以在后台异步的执行快照操作,快照的同时服务器还可以继续响应来自客户端的请求

3:执行FLUSHALL命令

当执行FLUSHALl命令时。Redsi会清除数据库中的所有数据。需要注意的是,不论清空数据库的过程是否触发了自动快照条件,只要自动快照条件不为空,Redis就会执行依次快照操作。

当没有定义自动快照时,执行FULSHALL不会进行快照

4:执行复制时

当设置了主从模式时。Redis会在复制初始化进行自动快照。

5:快照原理

快照原理如下:

  1. Redis使用fork函数复制一份当前进程(父进程)的副本(子进程)
  2. 父进程继续接收并处理客户端发来的命令,而子进程开始将内存中的数据写入硬盘中的临时文件
  3. 当子进程写入完所有数据后会用该临时文件替换旧的RDB文件,至此一次快照操作完成

3:AOF方式

使用Redis存储非临时数据时,一般需要打开AOF持久化来降低进程中止导致的数据丢失。AOF可以将Redis执行的每一条命令追加到硬盘文件中。

1:开启AOF

默认情况下Redis没有开启AOF方式的持久化,可以通过appedonly参数启用appendonly yes

开启AOF持久化后每执行一条会更改Redis中的数据的命令,Redis就会将该命令写入硬盘的AOF文件

2:AOF的“重写机制”

AOF由于每次都会记录写命令,文件会很大,因此需要优化,称之为“重写机制”。

在重写的过程中也是需要父进程fork出一个子进程进行重写操作

3:刷盘策略fsync

配置everysec:Redis默认每隔一秒进行一次fsync调用,将缓冲区中的数据写到磁盘上

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值