Redis学习5——持久化

持久化
redis的持久化,有两种:RDB,AOF

RDB

1.定义
redis默认采用,通过快照完成,符合条件时redis会自动将内存中的数据进行快照并存储到磁盘,
一般是当前目录的dump.rdb文件,可通过dir和dbfilename两个参数分别指定快照文件的存储路径和文件名。

2.快照条件
时间和改动的个数
save 900 1
save 300 10
save 6010000
以上为或的关系
900秒(15分钟)内至少有一个键被更改
300秒(5分钟)内至少10个键被更改

3.快照过程

  • 使用fork函数复制一份当前进程(父进程)的副本(子进程);
  • 当前进程继续接收并处理客户端发送的命令,而子进程开始将内存中的数据写入磁盘;
  • 当子进程写完所有数据后用该临时文件替换旧的RDB文件

注意:fork时会使用写时复制(copy-on-write)策略,即fork函数发生的一刻父子进程共享同一内存数据,当父进程要更改某片数据时,操作系统会将该片数据复制一份以保证子进程的数据不受影响,所以新的RDB文件存储的是执行fork一该时的内存

4.手动快照命令
save或bgsave,前者由主进程进行快照,会阻塞其他请求,后者会通过fork子进程进行快照操作

5.加载
redis启动后会读取RDB快照文件,将数据从磁盘载入内存。

6.风险
一旦redis异常退出,会丢失最后一次快照后的更改的数据。

AOF(append only file)

1.定义
每次执行更改数据的操作,都会将命令记录在AOF文件
纯文本文件,内容为redis客户端向redis发送的原始通信协议内容
通过参数appendonly yes 开启,默认文件appendonly.aof,地址同RDB

2.AOF重写条件
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
参数意义:
当AOF文件超过上一次重写时的AOF文件的百分之多少
当文件大小大于多少

3.手动AOF重写
bgrewriteaof

4.加载
redis启动后会逐个执行AOF文件中的命令来将磁盘中的数据载入到内存,速度相对RDB慢一些

5.风险
操作系统的缓存机制,数据并没有真正写入磁盘,而是进入系统的磁盘缓存,默认30s同步一次
通过参数优化此行为:
#appendfsync always
appendfsync everysec
#appendfsync no

默认情况下redis采用everysec规则,即每秒执行一次同步操作

redis可同时开启AOF和RDB,重启时采用AOF,因为可能丢失的数据更少

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值