欢迎来访我的博客。

Redis学习笔记3:Redis的持久化

数据库 小张哥哥 223浏览 0评论

在未持久化的情况下,Redis所有数据是保存在内存中的,服务器重启或者断电后会造成内存中的数据丢失,所以如果需要保存数据,则需要对内存中的数据进行持久化,对数据的更新将异步保存到硬盘上。

持久化的方式:

快照: MySQL Dump, Redis RDB

写日志: MySQL Binlog; Hbase HLog; Redis AOF

Redis持久化 -- RDB

触发rdb的三种方式:

  1. save(同步)
    save命令,单线程,阻塞 如果已经存在老大RDB文件,新文件替换老文件 复杂度:O(N)

  2. bgsave(异步)
    fork()一个子进程,用于生成rdb文件 不阻塞

  3. 自动 自动配置 save 900 1 save 300 10 save 60 10000 内部保存策略,是bgsave,fork子进程创建rdb文件

save与bgsave

命令savebgsave
IO类型同步异步
阻塞是(阻塞发生在fork)
复杂度O(n)O(n)
优点不会消耗额外内存不阻塞客户端命令
缺点阻塞客户端命令需要fork,消耗内存

Redis持久化 -- AOF

rdb在持久化上有一些问题: 耗时,耗性能

不可控,丢失数据

AOF三种策略

  1. always
    写入硬盘的缓冲区 always策略的每条命令都会实时把缓冲区内容写入到aof文件中(fsync)

  2. everysec 每秒将缓冲区文件写入到硬盘(fsync)

  3. no
    不手动设置,由操作系统决定何时写入。

always, everysec, no

命令alwayseverysecno
优点不会丢失数据每秒依次fsync, 最多丢失1秒书不用去设置
缺点IO开销较大丢失1秒数据不可控

AOF的重写

时间久了之后,AOF文件会很大。 AOF的重写

原生AOFAOF重写
set hello world
set hello java
set hello hehe
incr counter
incr counter
rpush mylist a
rpush mylist b
rpush mylist c
过期数据
set hello hehe
set counter 2
rpush mylist a b c

AOF重写作用:
减少硬盘占用量
加快恢复速度

AOF重写实现的两种方式: bgrewriteaof
客户端发送bgrewriteaof命令,fork()一个子进程,从redis内存中(而不是aof文件)读取数据进行AOF重写。

AOF重写配置:
auto-aof-rewrite-min-size
AOF文件重写需要的尺寸 auto-aof-rewrite-percentage
AOF文件增长率

AOF重写统计: aof_current_size
AOF当前尺寸(单位:字节)
aof_base_size
AOF上次启动和重写的尺寸

AOF被自动触发重写,需要满足:

  1. aof_current_size > auto-aof-rewrite-min-size

  2. aof_current_size - aof_base_size/aof_base_size > aof-rewrite-percentage

appendonly yes
appendfilename "appendonly-${port}.aof"
appendfsync everysec
dir /bigdiskpath
no-appendfsync-on-rewrite yes

Redis持久化的选择和取舍

RDB和OAF的比较

命令RDBAOF
启动优先级
提及
恢复速度
数据安全性丢数据与AOF策略有关
轻重

RDB最佳策略

集中管理
主从,从开?

AOF最佳策略
开: 缓存情况下可以关闭
AOF重写集中管理
everysec

最佳策略
小分片
缓存或存储
监控(硬盘,内存,负载,网络)
足够的内存


转载请注明:禅思 » Redis学习笔记3:Redis的持久化?

喜欢 (0) or 分享 (0)

我的个人微信公众号,欢迎关注

扫码或搜索:Python后端开发Django

Python后端开发Django

微信公众号 扫一扫关注

结交朋友、一起学习,一起进步。

科波之主

QQ号 386046154 立即加入

添加微信,进行技术交流

专注技术交流, 一同成长进步

我的微信号

如果您喜欢我的文章,感觉我的文章对您有帮助,请狠狠点击下面

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(0)个小伙伴在吐槽