iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >浅谈redis内存数据的持久化方式
  • 879
分享到

浅谈redis内存数据的持久化方式

2024-04-02 19:04:59 879人浏览 泡泡鱼
摘要

一、概述 Redis的强大性能很大程度上都是因为所有数据都是存储在内存中的,然而当Redis重启后,所有存储在内存中的数据将会丢失,在很多情况下是无法容忍这样的事情的。所以,我们需要将内存中的数据持久化!典

一、概述

Redis的强大性能很大程度上都是因为所有数据都是存储在内存中的,然而当Redis重启后,所有存储在内存中的数据将会丢失,在很多情况下是无法容忍这样的事情的。所以,我们需要将内存中的数据持久化!典型的需要持久化数据的场景如下:

  1. 将Redis作为数据库使用;
  2. 将Redis作为缓存服务器使用,但是缓存miss后会对性能造成很大影响,所有缓存同时失效时会造成服务雪崩,无法响应。

本文介绍Redis所支持的两种数据持久化方式。

二、Redis数据持久化

Redis支持两种数据持久化方式:RDB方式和AOF方式。前者会根据配置的规则定时将内存中的数据持久化到硬盘上,后者则是在每次执行写命令之后将命令记录下来。两种持久化方式可以单独使用,但是通常会将两者结合使用。

1、RDB方式

RDB方式的持久化是通过快照的方式完成的。当符合某种规则时,会将内存中的数据全量生成一份副本存储到硬盘上,这个过程称作”快照”,Redis会在以下几种情况下对数据进行快照:

  1. 根据配置规则进行自动快照;
  2. 用户执行SAVE, BGSAVE命令;
  3. 执行FLUSHALL命令;
  4. 执行复制(replication)时。

执行快照的场景

(1)根据配置自动快照

Redis允许用户自定义快照条件,当满足条件时自动执行快照。缺省情况下,Redis把数据快照存放在磁盘上的二进制文件中,文件名为dump.rdb,此外,我们也可以通过配置文件来修改Redis服务器dump快照的频率,在打开redis.windows.conf文件之后,我们搜索save,可以看到下面的配置信息:

浅谈redis内存数据的持久化方式

注意最后三行,分别表示:

在900秒(15分钟)之后,如果至少有1个key发生变化,则dump内存快照;

在300秒(5分钟)之后,如果至少有10个key发生变化,则dump内存快照;

在60秒(1分钟)之后,如果至少有10000个key发生变化,则dump内存快照。

每个快照条件独占一行,他们之间是或(||)关系,只要满足任何一个就进行快照。上面配置save后的第一个参数T是时间,单位是秒,第二个参数M是更改的键的个数,含义是:当时间T内被更改的键的个数大于M时,自动进行快照。比如save 900 1的含义是15分钟内(900s)被更改的键的个数大于1时,自动进行快照操作。

(2)执行SAVE或BGSAVE命令

除了让Redis自动进行快照外,当我们需要重启,迁移,备份Redis时,我们也可以手动执行SAVE或BGSAVE命令主动进行快照操作。

SAVE命令:当执行SAVE命令时,Redis同步进行快照操作,期间会阻塞所有来自客户端的请求,所以放数据库数据较多时,应该避免使用该命令;

BGSAVE命令:从命令名字就能看出来,这个命令与SAVE命令的区别就在于该命令的快照操作是在后台异步进行的,进行快照操作的同时还能处理来自客户端的请求。执行BGSAVE命令后Redis会马上返回OK表示开始进行快照操作,如果想知道快照操作是否已经完成,可以使用LASTSAVE命令返回最近一次成功执行快照的时间,返回结果是一个Unix时间戳。

(3)执行FLUSHALL命令

当执行FLUSHALL命令时,Redis会清除数据库中的所有数据。需要注意的是:不论清空数据库的过程是否触发了自动快照的条件,只要自动快照条件不为空,Redis就会执行一次快照操作,当没有定义自动快照条件时,执行FLUSHALL命令不会进行快照操作。

(4)执行复制

当设置了主从模式时,Redis会在复制初始化时进行自动快照。

快照原理

Redis默认会将快照文件存储在Redis当前进程的工作目录的dump.rdb文件中,可以通过配置文件中的dir和dbfilename两个参数分别指定快照文件的存储路径和文件名,默认的存储路径和文件名如下图所示:

浅谈redis内存数据的持久化方式

快照执行的过程如下:

(1)Redis使用fork函数复制一份当前进程(父进程)的副本(子进程);
(2)父进程继续处理来自客户端的请求,子进程开始将内存中的数据写入硬盘中的临时文件;
(3)当子进程写完所有的数据后,用该临时文件替换旧的RDB文件,至此,一次快照操作完成。

需要注意的是:

在执行fork的时候操作系统(类Unix操作系统)会使用写时复制(copy-on-write)策略,即fork函数发生的一刻,父进程和子进程共享同一块内存数据,当父进程需要修改其中的某片数据(如执行写命令)时,操作系统会将该片数据复制一份以保证子进程不受影响,所以RDB文件存储的是执行fork操作那一刻的内存数据。所以RDB方式理论上是会存在丢数据的情况的(fork之后修改的的那些没有写进RDB文件)。

通过上述的介绍可以知道,快照进行时是不会修改RDB文件的,只有完成的时候才会用临时文件替换老的RDB文件,所以就保证任何时候RDB文件的都是完整的。这使得我们可以通过定时备份RDB文件来实现Redis数据的备份。RDB文件是经过压缩处理的二进制文件,所以占用的空间会小于内存中数据的大小,更有利于传输。

Redis启动时会自动读取RDB快照文件,将数据从硬盘载入到内存,根据数量的不同,这个过程持续的时间也不尽相同,通常来讲,一个记录1000万个字符串类型键,大小为1GB的快照文件载入到内存需要20-30秒的时间。

示例

下面演示RDB方式持久化,首先使用配置有如下快照规则:


save 900 1
save 300 10
save 60 10000
dbfilename dump.rdb
dir ./
您可能感兴趣的文档:

--结束END--

本文标题: 浅谈redis内存数据的持久化方式

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

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

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

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

下载Word文档
猜你喜欢
  • 浅谈redis内存数据的持久化方式
    一、概述 Redis的强大性能很大程度上都是因为所有数据都是存储在内存中的,然而当Redis重启后,所有存储在内存中的数据将会丢失,在很多情况下是无法容忍这样的事情的。所以,我们需要将内存中的数据持久化!典...
    99+
    2022-10-18
  • 内存型数据库Redis持久化小结
    因为Redis是内存型数据库,所以为了防止因为系统崩溃等原因导致数据丢失的问题,Redis提供了两种不同的持久化方法来将数据存储在硬盘里面,一种方法是快照(RDB),它可以将存在于某一个时刻的所有数据都写入...
    99+
    2022-06-04
    小结 持久 内存
  • Redis(一):初识Redis内存数据库与持久化
    什么是Redis内存数据库?Redis,本质上上一个KEY-VALUE类型的内存数据库,整个数据库都加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。因此它是纯内存操作,Red...
    99+
    2022-10-18
  • redis有几种数据持久化方式
    今天就跟大家聊聊有关redis的数据持久化方式,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。redis提供了两种数据持久化的方式,分别是RDB(Re...
    99+
    2022-10-18
  • redis数据的两种持久化方式对比
    一.概念介绍 redis提供了两种持久化的方式,分别是RDB(Redis DataBase)和AOF(Apend Only File)。 RDB方式 RDB方式是一种快照式的持久化方法,将某一时刻的数据持久...
    99+
    2022-06-04
    两种 持久 方式
  • redis持久化数据有哪几种方式?
    redis持久化数据有哪几种方式?相信很多人对redis持久化数据的了解处于一知半解状态,小编给大家总结了以下内容。如下资料是关于redis持久化数据的内容。Redis被称为是内存数据库,那是因为它会将其所...
    99+
    2022-10-18
  • Redis数据持久化方式技术解析
    RDB(Redis DataBases) 1、RDB是什么: 在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是Snapshot快照,它恢复时是将快照文件直接读到内存里。 Red...
    99+
    2022-11-12
  • 内存型数据库Redis持久化的示例分析
    这篇文章主要为大家展示了“内存型数据库Redis持久化的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“内存型数据库Redis持久化的示例分析”这篇文章吧...
    99+
    2022-10-18
  • 配置redis持久化的方式
    这期内容当中的小编将会给大家带来有关配置redis持久化的方式,以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。由于Redis的数据都存放在内存中,如果没有配置持久化,redis重启后数据...
    99+
    2022-10-18
  • redis数据持久化的实现方法
    小编给大家分享一下redis数据持久化的实现方法,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!Redis实现数据持久化的两种实现方式:RDB:指定的时间间隔内保存数据快照AOF:先把命令追加到...
    99+
    2022-10-18
  • redis中有哪些实现数据持久化的方式
    redis中实现数据持久化的方式有:1.RDB方式,通过快照实现数据持久化;2.AOF方式,以日志的形式实现数据持久化;redis中实现数据持久化的方式有以下两种RDB方式RDB方式是通过快照的方式实现数据持久化,当符合一定条件时,redi...
    99+
    2022-10-22
  • 探究Redis两种持久化方式下的数据恢复
        对长期奋战在一线的后端开发人员来说,都知道redis有两种持久化方式RDB和AOF,虽说大家都知道这两种方式大概运作方式,但想必有实操了解得不会太多。     这里是自己实操两种持久化方式的一点点记录。      先看以下...
    99+
    2020-06-02
    探究Redis两种持久化方式下的数据恢复
  • Redis实现持久化的方式汇总
    目录Redis写入AOF日志的过程Redis实现RDB快照混合持久化Redis有3种实现持久化的方式:AOF日志、RDB快照、混合持久化 Redis写入AOF日志的过程 Redis执行完写操作命令后,将命令追加到serv...
    99+
    2022-10-13
  • Redis持久化的方式有哪几种
    这篇文章将为大家详细讲解有关Redis持久化的方式有哪几种,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Redis 的读写都是在内存中,所以它的性能较高,但在内存中的数据...
    99+
    2022-10-18
  • 浅谈Redis存储数据类型及存取值方法
    Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合) String存取值: 是 redi...
    99+
    2022-11-12
  • 浅谈MySQL数据同步到 Redis 缓存的几种方法
    目录1 mysql查完数据,再同步写入到Redis中2 Mysql查完数据,通过发送MQ,在消费者线程去同步Redis3 订阅Mysql的Binlog文件(可借助Canal来进行)4 延迟双删5 延迟双写6 总结1 My...
    99+
    2023-03-19
    MySQL数据同步到Redis缓存 MySQL数据同步
  • 浅谈MySQL数据同步到Redis缓存的几种方法
    目录1 Mysql查完数据,再同步写入到Redis中2 Mysql查完数据,通过发送MQ,在消费者线程去同步Redis3 订阅Mysql的Binlog文件(可借助Canal来进行)4...
    99+
    2023-03-19
    MySQL数据同步到Redis缓存 MySQL数据同步
  • Redis中AOF持久化方式的工作流程
    Redis的RDB方式不能做到妙计持久化,但是AOF方式可以做到。如果数据比较重要,丢失会造成严重的后果,那么RDB方式明显不合适,要用到AOF的方式。aof方式和mysql的binlog日志有些像,都只记...
    99+
    2022-10-18
  • Redis中的两种持久化方式是什么
    本篇内容主要讲解“Redis中的两种持久化方式是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Redis中的两种持久化方式是什么”吧!Redis的两种持久化...
    99+
    2022-10-18
  • 浅谈分布式锁的几种使用方式(redis、zookeeper、数据库)
    Q:一个业务服务器,一个数据库,操作:查询用户当前余额,扣除当前余额的3%作为手续费 synchronized lock dblock Q:两个业务服务器,一个数据库,操作:查询用户当前余额...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作