您现在的位置是:主页 > 数据库技术 > 数据库技术

Redis中持久化机制是怎么样的

IDCBT2021-12-30服务器技术人已围观

简介小编给大家分享一下Redis中持久化机制是怎么样的,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧! Redis持久化机制 为什么要持久化 如果Redis再次访问时,发现R

小编给大家分享一下Redis中持久化机制是怎么样的,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

Redis持久化机制

为什么要持久化

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

这个时候,数据库可能就挂掉。而又无法保证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对比:

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

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

    执行flushall命令

    flushall

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

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

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

    RDB执行流程

      流程分析







          父进程fork子进程后,继续工作。

          子进程发送信号给父进程表示完成,父进程更新统计信息。

          子进程创建RDB文件,根据父进程内存快照生成临时快照文件,完成后对原有文件进行原子替换。(RDB始终完整)

          父进程fork后,bgsave命令返回”Background saving started”信息并不再阻塞父进程,并可以响应其他命令。

          标签:

          很赞哦! ()

本栏推荐