为了账号安全,请及时绑定邮箱和手机立即绑定

【学习打卡】第9天 Redis持久化机制学习

标签:
Redis

课程名称Java架构师-技术专家
课程章节:第7周 集群架构:主从复制高可用Redis集群
主讲老师:慕课讲师团:Geely、风间影月、阿神……

课程内容:

1、Redis 的持久化机制-RDB

RDB:Redis DataBase
AOF: Append Only File

1.1、什么是RDB

RDB:每隔一段时间,把内存中的数据写入磁盘的临时文件,作为快照,恢复的时候把快照文件读进内存。

如果宕机重启,那么内存里的数据肯定会没有的,那么再次启动 Redis 后,则会恢复。

1.2、备份与恢复

内存备份 → 磁盘临时文件
磁盘临时文件 → 恢复到内存

1.3、RDB 优势

优势

  • 每隔一段时间备份,全量备份
  • 容灾简单,可以远程传输
  • 子进程备份的时候,主进程不会有任何 io 操作(不会有写入或删除),保证备份数据的完整性
  • 相对AOF 来说,当有更大文件的时候可以快速重启恢复
    劣势
  • 发生故障时,有可能丢失最后一次的备份数据
  • 子进程所占用的内存比会和父进程一模一样,如此会造成CPU负担。
  • 由于定时全量备份是重量级操作,所以对于实时备份,就无法处理了

1.4、RDB 的配置

  1. 保存位置,可以在 redis.conf 自定义
    # The filename where to dump the DB
    dbfilename dump.rdb
    
  2. 保存机制
    # 如果一个缓存更新,则 15 分钟后备份
    save 900 1
    # 如果10个缓存更新,则 300 秒后备份
    save 300 10
    # 如果 10000  个缓存更新,则 1 分钟后备份
    save 60 10000
    
  3. stop-writes-on-bgsave-error
    • yes : 如果 save 过程出错,则停止写操作
    • no:可能造成数据不一致
  4. rdbcompression
    • yes:开启rdb压缩模式
    • no:关闭,会节约cpu损耗,但是文件会大,道理同nginx
  5. rdbchecksum
    • yes:使用CRC64算法校验对 rdb 进行数据校验,有10%的性能损耗
    • no:不校验

1.5、总结

RDB 适合大量数据的恢复,但是数据的完整性和一致性可能会不足。

Redis的持久化机制-AOF

RDB会丢失最后一次备份后的数据,但是其实也无所谓,可以忽略不计,毕竟是缓存,丢了就丢了,但是如果追求数据的完整性,那就得考虑使用 AOF了

2、AOF特点

  1. 以日志的形式来记录用户请求的写操作。读操作不会被缓存,因为写操作才会存储。
  2. 文件以追加的形式而不是修改的形式。
  3. redis 的 aof 恢复其实就是把追加的文件从开始到结尾读取执行写操作。

3. 优势

  1. AOF 更加耐用,可以以秒级别为单位备份,如果发生问题,也只会丢失最后一秒的数据,大大增加了可靠性和数据完整性。所以AOF可以每秒备份一次,使用 fsync 操作。
  2. 以 log 日志形式追加,如果磁盘满了,就执行 redis-check-aof 工具
  3. 当数据太大的时候,redis 可以在后台自动重写 aof。当 redis 继续把日志追加到老的文件中去时,重写也是非常安全的,不会影响客户端的读写操作。
  4. AOF 日志包含所有的写操作,会更加便于 redis 的解析恢复。

4. 劣势

  1. 相同的数据,同一根数据,AOF 比 RDB 大
  2. 针对不同的同步机制, AOF 会比 RDB 慢, 因为 AOF 每秒都会备份做写操作,这样相对于RDB来说就略点。每秒备份 fsync 没毛病,但是如果客户端每次写入就做一次备份fsnc的话,那么 redis 的性能就会下降。
  3. AOF 发生过 bug ,就是数据恢复的时候数据不完整,这样显得 AOF 会比较脆弱,容易出现 bug ,因为 AOF 没有 RDB 那么简单,但是为了防止 bug 的产生 ,AOF 就不会根据旧的指令去重构,而是根据当时缓存中存在的数据指令去做重构,这样就更加健壮和可靠了。

5、 AOF 的配置

# AOF 默认关闭,yes可以开启
appendonly no

# AOF 的文件名
appendfilename "appendonly.aof"

# no:不同步
# everysec:每秒备份,推荐使用
# always:每次操作都会备份,安全并且数据完整,但是慢性能差
appendfsync everysec

# 重写的时候是否要同步,no可以保证数据安全
no-appendfsync-on-rewrite no

# 重写机制:避免文件越来越大,自动优化压缩指令,会fork一个新的进程去完成重写动作,新进程里的内存数据会被重写,此时旧的aof文件不会被读取使用,类似rdb
# 当前AOF文件的大小是上次AOF大小的100% 并且文件体积达到64m,满足两者则触发重写
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

6、到底采用哪一种?

  1. 如果能接受一段时间的缓存丢失,那么可以使用RDB
  2. 如果对实时性的数据比较在意,那么就用AOF
  3. 使用RDB 和 AOF 结合一起做持久化,RDB做冷备,可以在不同时期对不同版本做恢复,AOF 做热备,保证数据仅仅只有 1秒的丢失。当AOF 破损不可用了,那么再用RDB 恢复,这样就做到了两者的相互结合,也就是说 Redis 恢复会先加载AOF,如果AOF 有问题会再加载RDB,这样就达到 冷热备份的目的了。

3、 Redis 的发布订阅机制

订阅之后,订阅者和发布者之间相当于是 绑定了一层关系。

订阅

SUBSCRIBE ch # 订阅某个信道,可以同时订阅多个
订阅之后,订阅者处于监听的状态。

发布

PUBLIC ch 消息
发布之后订阅了这个 ch 的订阅者就会收到此消息。

专人做专事,不建议使用redis 做RabbitMQ的功能

学习收获:

今天学习 2 个小时, 主要学习了 Redis 的持久化机制。
Redis 支持两种持久化机制 RDB(Redis Database) 和 AOF(Append only file)
RDB 适合大数据量的恢复,但数据的完整性和一致性不如 AOF ,AOF 文件较大,但可以做到秒级别的备份,数据的完整性和一致性比 RDB 好,但是恢复速度要比 RDB 慢
今天的学习完毕!再接再厉!
图片描述
图片描述

点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
6
获赞与收藏
11

关注作者,订阅最新文章

阅读免费教程

感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消