广告
返回顶部
首页 > 资讯 > 数据库 >Redis持久化机制
  • 197
分享到

Redis持久化机制

Redis持久化机制 2020-06-06 09:06:48 197人浏览 才女
摘要

1、Redis数据持久化的必要性 由于redis是基于内存的数据库,面临数据掉电易失的风险,要避免数据丢失,最好将内存数据持久化到磁盘等永久存储介质上。服务重启时,会先加载磁盘文件内的数据到内存,完成数据恢复。 2、RDB(Red

Redis持久化机制

1、Redis数据持久化的必要性

由于redis是基于内存的数据库,面临数据掉电易失的风险,要避免数据丢失,最好将内存数据持久化到磁盘等永久存储介质上。服务重启时,会先加载磁盘文件内的数据到内存,完成数据恢复。

2、RDB(RedisDB)

对内存中的redis全量数据进行时点快照并序列化,以文件形式保存到磁盘上,生成的是dump.rdb二进制文件。到了dump时间点就生成一份新的rdb文件,同时覆盖掉旧的。服务重启时直接将dump文件反序列化并加载到内存中,数据恢复速度较快,也是redis默认的持久化方式。hdfs的namenode也是用类似的方式生成fsimage文件来做持久化的,hdfs的nameNode也是用类似的方式生成fsimage文件来做持久化的

执行方式:

阻塞式:

类似JVM的stop-the-world,做快照的时候不能处理客户端请求,客户端可以使用save命令触发。优点原理简单,能保证数据一致性,缺点是对用户不友好。

非阻塞式:

服务端做数据快照的时候,可以继续处理客户端的请求,客户端可以使用bgsave命令触发。优点是对客户端友好,但复杂度高,必须解决做快照的同时,并发写操作造成的数据不一致问题。
redis中的所有key和value是分为两个部分单独存储的,两个数据区之间建立映射关系,数据修改只是映射关系的改变。
大体机制:当服务端接收到bgsave命令后,服务端不会立马执行快照操作,而是选择合适的时机fork一个子进程,这个子进程全量继承父进程的key数据集和映射关系。实现类cow的效果,子进程只保证dump时点当前的数据一致性,至于并发修改的数据就交给下一次dump来持久化。

配置策略:

可以通过客户端发命令的方式,也可以写在配置文件中实现自动持久化。
save 900 1 //如果在900秒内发生了超过1次k-v更新就触发一次dump
save 300 10 //如果在300秒内发生了超过10次k-v更新就触发一次dump
save 60 10000 //如果在60秒内发生了超过1万次k-v更新就触发一次dump
dbfilename dump.rdb //快照文件名
dir /opt/redis/rep //快照存储路径
【每完成一次快照后,时间计和更新计数器都会清零】

优点:

  1. 全量备份,可以做到针对不同时间点的多版本恢复(此时需要避免覆盖问题,推荐用多服务器来存储dump文件)。
  2. 备份文件紧凑单一,利于网络传输,适合灾难恢复。
  3. 恢复大数据集速度比AOF快。

缺点:

  1. 最后一次快照时如果掉电,并发写的数据将丢失,所以适合存储能容忍这种风险的场合。
  2. fork过程会造成毫秒级的耗时,会造成短暂的拒绝相应。

3、AOF(AppendOnlyFile)

实时记录每一条写数据的命令,形成binlog,服务重启时会原样执行一遍aof文件中的所有命令,达到数据恢复的目的,但恢复速度比rdb式慢。hdfs中提供了类似的方式,edit-log,只是默认时关闭的。

几乎可以做到不丢失任何数据,也可以控制丢失一秒内的数据。
备份的数据量太大,不够紧凑,io交互频繁。
写入机制:在现代操作系统中,程序执行write系统调用时,是先将数据写到一个内存buffer中,等到buffer满或者用户执行fsync或fdatasync
指令时才会将buffer数据刷到disc上,所以未刷盘的数据存在掉电丢失风险。

落盘策略由appendfssync选项控制:

  • always:服务端每接收一个更新指令都刷到磁盘,不会发生数据丢失,但是io太过频繁效率很低。
  • everysecond:每隔1秒钟刷一次盘,有可能丢失一秒钟的数据,效率适中。
  • no:服务端不主动刷盘,数据何时落盘完全取决于操作系统,只有当buffer满了才会刷盘,丢失数据量不确定,效率最高。

AOF重写机制:

由于AOF文件时间长了会很大,可以通过分析文件内容,将多条命令合并为一条,将对同一个key的多次操作只保留最新的那一次。

AOF重写过程

  • fork一个子进程负责重写AOF文件
  • 子进程创建一个临时文件来写入AOF数据
  • 父进程开辟一个内存缓冲区接收新的写命令
  • 子进程重写完毕后,父进程会获得一个信号,父进程将新收到的写命令通过子进程写入临时文件
  • 用临时文件替换掉旧的AOF文件

AOF重写的触发

  1. 手动式:通过客户端发送bgrewriteaof命令。
  2. 自动式:必须在配置文件中配置如下两个参数
    • auto-aof-rewrite-min-size 500mb //只有当aof文件大于等于500M时,服务器才会重写aof文件,避免过小文件的重写问题。
    • auto-aof-rewrite-min-percentage 60 //在满足最小阈值的前提下,超过上一次重写后生成的文件体积的60%时将触发重写,避免了无限循环重写。(如果尚未做过重写,就以启动时的AOF文件体积作为对比基准,如果此值为0,则表示关闭自动重写功能)。

优点:

  • 默认每秒刷盘,性能好不阻塞服务,最多丢失一秒数据。
  • 如果发生误操作(flushall等),只要文件未被重写,立即停止服务将,AOF文件最后的flushall命令删除,然后重启redis服务实现数据恢复。

缺点:

  • 相同数据集,AOF比RDB大很多。
  • 数据恢复速度比RDB慢。
您可能感兴趣的文档:

--结束END--

本文标题: Redis持久化机制

本文链接: https://www.lsjlt.com/news/4484.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Redis持久化机制
    1、Redis数据持久化的必要性 由于redis是基于内存的数据库,面临数据掉电易失的风险,要避免数据丢失,最好将内存数据持久化到磁盘等永久存储介质上。服务重启时,会先加载磁盘文件内的数据到内存,完成数据恢复。 2、RDB(Red...
    99+
    2020-06-06
    Redis持久化机制
  • redis 的持久化机制
    redis 持久化机制有两种:RDB 和 AOF。 RDB RDB 机制是对 redis 中的数据执行周期性的持久化。每个几分钟、几小时、几天生成 redis 内存中的数据的一份完整的快照。 AOF 每条写入命令作为日志,写入 aof 文...
    99+
    2015-09-25
    redis 的持久化机制
  • Redis系列(三):Redis的持久化机制(RDB、AOF)
    本篇博客是Redis系列的第3篇,主要讲解下Redis的2种持久化机制:RDB和AOF。 本系列的前2篇可以点击以下链接查看: Redis系列(一):Redis简介及环境安装。 Redis系列(二):Redis的5种数据结构及其常...
    99+
    2015-06-21
    Redis系列(三):Redis的持久化机制(RDB AOF)
  • redis持久化机制是什么意思
    redis持久化机制有两种方式:RDB和AOF。RDB指的是用数据集快照的方式半持久化模式记录 redis数据库的所有键值对,在某个时间点将数据写入一个临时文件,持久化结束后,用这个临时文件替换上次持久化的文件,达到数据恢复。AOF指的是所...
    99+
    2022-10-22
  • Redis持久化存储机制是什么
    这篇文章主要讲解了“Redis持久化存储机制是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Redis持久化存储机制是什么”吧!Redis 的数据全部在内存里,如果突然宕机,数据就会全部...
    99+
    2023-06-27
  • Redis中持久化机制是怎么样的
    小编给大家分享一下Redis中持久化机制是怎么样的,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!Redis持久化机制为什么要持久化如果Redis再次访问时,发现Redis的数据是空的,就会...
    99+
    2022-10-19
  • redis的持久化机制在哪里配置
    redis的持久话机制在配置文件“redis.conf”中配置 ,例如:# 时间策略save 900 1save 300 10save 60 10000# 文件名称dbfilename dump.rdb# 文件保存路径dir /home/w...
    99+
    2022-10-23
  • Redis的持久化机制采用RDB还是AOF
    这篇文章主要讲解了“Redis的持久化机制采用RDB还是AOF”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Redis的持久化机制采用RDB还是AOF”吧!...
    99+
    2022-10-19
  • Redis持久化机制实现原理和流程
    Redis持久化机制实现原理是什么?流程是什么?持久化就是把内存中的数据存放到磁盘中,防止宕机后内存数据丢失。按照指定的时间间隔内将内存的数据以快照的形式保存到硬盘中,对应产生的数据文件为dump.rdb。通过配置文件中...
    99+
    2023-04-26
    Redis 持久化 Redis持久化原理 Redis持久化流程
  • Redis的持久化和主从复制机制是什么
    小编给大家分享一下Redis的持久化和主从复制机制是什么,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!Redis持久化Redis 提供了多种不同级别的持久化方式:RDB 持久化可以在指定的时间...
    99+
    2022-10-18
  • redis的持久化
    为什么要持久化?在不考虑服务器宕机的情况下,是不需要把内存中的数据保存到磁盘,来做持久化的。持久化,就是专门为宕机准备的补救措施。redis有rdb和aof两种持久化机制。一、RDB (Redis Data...
    99+
    2022-10-18
  • Redis 的持久化
    原文链接: https://www.changxuan.top/p=1386   Redis 是一个非关系型的内存数据库,使用内存存储数据是它能够进行快速存取数据的原因之一。 在实际应用中,常有人提倡把 Redis 只作为一种能够提高用...
    99+
    2018-01-28
    Redis 的持久化
  • Redis之持久化
    redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到硬盘来保证持久化。redis支持两种持久化方式: 1、snapshotting(快照)也是默认方式。将内存中的数据以快照...
    99+
    2022-10-18
  • Redis中磁盘持久化机制的示例分析
    这篇文章将为大家详细讲解有关Redis中磁盘持久化机制的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。正文Redis 是一个基于 K-V 存储的数据库服务器,下面...
    99+
    2022-10-18
  • 如何解密Redis的持久化和主从复制机制
    这篇文章将为大家详细讲解有关如何解密Redis的持久化和主从复制机制,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。 小编将为大...
    99+
    2022-10-19
  • Redis如何监控持久化和优化持久化?
    Redis持久化过程一直是影响redis性能的常见因素,如何监控持久化以及如何优化持久化过程呢?下面我们就一起来看看吧。fork的监控及优化不管是使用哪种持久化,RDB持久化或AOF重写,主进程都会fork...
    99+
    2022-10-18
  • redis数据持久化
    1 redis是内存型的数据库 redis数据放在内存中 重启服务器丢失数据 重启redis服务丢失数据 断电丢失数据 为了防止redis数据丢失, 进行持久化, 所以将数据写入到一个文件中来实现 2 rdb持久化 在配置文件中, 添加rd...
    99+
    2021-06-10
    redis数据持久化
  • redis持久化存储
    redis持久化存储 redis持久化存储 redis多被用于缓存和消息中间件,当被用作缓存时,数据的读写都是在内存中进行的,而内存一旦在主机断电或者主机重启时里面的数据将被清空,为保证数据不被丢失,r...
    99+
    2020-12-12
    redis持久化存储
  • Redis之--rdb持久化
    持久化:通俗讲,下次开机还有数据,断电后不会丢失数据,存放于磁盘。 Redis:rdb快照持久化每隔N分钟或N次写操作后,从内存dump数据形成RDB文件。压缩,放在备份目录。 参数详解:从下往上看save...
    99+
    2022-10-18
  • Redis 持久化详解
    http://www.redis.cn/topics/persistence.html 持久化 Redis 如同其他的存储组件一样,提供了两类持久化方式:快照,和全量追加日志。 RDB - 快照 在默认情况下, Redis 将数据库...
    99+
    2015-08-16
    Redis 持久化详解
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作