WEB开发者-分享WEB开发知识,让开发变得更简单!

详细解析Redis中的持久化机制

本篇文章带大家了解一下Redis中的持久化机制:RDB和AOF,并对比一下RDB和AOF,希望对大家有所帮助!

详细解析Redis中的持久化机制

Redis持久化机制

为什么要持久化

如果Redis再次访问时,发现Redis的数据是空的,就会形成缓存穿透。更重要的是,因为Redis的数据是空的,所以客户端想要访问的key都没有,就会造成大量的请求就会瞬间打到数据库上,造成缓存雪崩(少量的key是穿透,大量的key是雪崩)。

这个时候,数据库可能就挂掉。而又无法保证redis不宕机,所以需要当redis宕机后,迅速将里里面的内容恢复出来。因此需要做一个持久化。持久化是为了恢复数据用的,而不是存储数据用的。【相关推荐:Redis视频教程】

RDB

RDB(Redis DataBase),是Redis默认的存储方式,RDB方式是通过快照(snapshotting)完成的。

触发快照的方式

符合自定义配置的快照规则

  • save 900 1 # 表示15分钟(900秒钟)内至少1个键被更改则进行快照。

  • save 300 10 # 表示5分钟(300秒)内至少10个键被更改则进行快照。

  • save 60 10000 # 表示1分钟内至少10000个键被更改则进行快

N秒内数据集至少有M个改动”这一条件被满足时,自动保存一次数据集。

执行save或者bgsave命令

执行命令save或bgsave可以生成dump.rdb文件,每次命令执行都会将所有redis内存快照到一个新的rdb文件里,并覆盖原有rdb快照文件。

save与bgsave对比:

命令savebgsave
IO类型同步异步
是否阻塞redis其它命令否(在生成子进程执行调用fork函数时会有短暂阻塞)
复杂度O(n)O(n)
优点不会消耗额外内存不阻塞客户端命令
缺点阻塞客户端命令需要fork子进程,消耗内存

配置自动生成rdb文件后台使用的是bgsave方式。

执行flushall命令

flushall

清空Redis之前,保存当前Redis快照

执行主从复制操作 (第一次)

第一次主从复制时需要生成rdb文件,会保存当前Redis快照

RDB执行流程

详细解析Redis中的持久化机制

Redis数据备份策略

  • 1.写crontab定时调度脚本,每小时都copy一份rdb或aof的备份到一个目录中去,仅仅保留最近48小时的备份

  • 2.每天都保留一份当日的数据备份到一个目录中去,可以保留最近1个月的备份

  • 3.每次copy备份的时候,都把太旧的备份给删了

  • 4.每天晚上将当前机器上的备份复制一份到其他机器上,以防机器损坏

RDB和AOF对比

  • 1、RDB存某个时刻的数据快照,采用二进制压缩存储,AOF存操作命令,采用文本存储(混合)

  • 2、RDB性能高、AOF性能较低

  • 3、RDB在配置触发状态会丢失最后一次快照以后更改的所有数据,AOF设置为每秒保存一次,则最多丢2秒的数据

  • 4、Redis以主服务器模式运行,RDB不会保存过期键值对数据,Redis以从服务器模式运行,RDB会保存过期键值对,当主服务器向从服务器同步时,再清空过期键值对。AOF写入文件时,对过期的key会追加一条del命令,当执行AOF重写时,会忽略过期key和del命令。

更多编程相关知识,请访问:编程视频!!

以上就是详细解析Redis中的持久化机制的详细内容,更多请关注web开发者其它相关文章!

本文链接:https://www.webkfz.com/sjk/sjkzh/dnve.html

版权声明:站内所有文章皆来自网络转载,只供分享作用,不代表本站的观点!

发表评论 共有 0 条评论)

联系客服
网站客服 业务合作 QQ
1244305267
公众号
公众号
公众号
返回顶部