iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >如何在Redis中实现持久化
  • 543
分享到

如何在Redis中实现持久化

2023-06-06 16:06:52 543人浏览 安东尼
摘要

如何在Redis中实现持久化?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1、概述Redis 是内存数据库,如果不能将内存中的数据保存到磁盘中,那么一旦服务器进程退出,服务

如何在Redis中实现持久化?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

1、概述

Redis 是内存数据库,如果不能将内存中的数据保存到磁盘中,那么一旦服务器进程退出,服务器数据库数据也会消失,所以Redis提供了持久化的功能,redis分为两种持久化方式:RDB和AOF。有以下几个特点:

RDB持久化方式能够在指定的时间间隔能对你的数据进行快照存储。

AOF持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据,AOF命令以redis协议追加保存每次写的操作到文件末尾。Redis还能对AOF文件后台重写,使得AOF文件的体积不至于过大。

如果你只希望你的数据在服务器运行的时候存在,你也可以不使用任何持久化的方式。

你也可以同时开启两种持久化方式,在这种情况下,当redis重启的时候会优先载入AOF文件来恢复原始的数据。因为在通常情况下AOF文件保存的数据集要比RDB文件保存的数据集要完整。

2、RDB

概念

在指定的时间间隔内将内存中的数据集快照写入磁盘中,它恢复的时候是将快照中的文件直接读取到内存中。

持久化机制-BGSAVE

如何在Redis中实现持久化

通常,会立即返回ok,Redis进程会执行fork操作创建子进程,Redis在fork时,父进程会继续为客户端提供服务,子进程会将数据持久化到硬盘上,然后退出。如果已经在后台执行保存或者正在运行另一个非后台保存的进程,特别是正在进行AOF写入时,则会返回错误。如果使用了bgsave任务,而正在进行AOF写入时,该命令将立即返回ok,并计划在下一次机会运行后台保存。阻塞只会在fork阶段。
客户端可以使用lastsave命令检查操作是否成功。

持久化机制-SAVE

不会接受客户端执行的操作命令,等持久化工作完成之后,会将新的文件替换旧的文件。

持久化机制-自动触发

redis.conf中可以配置,让用户自定义save属性,让服务器每一段时间内执行一次bgsave操作。

# 服务器在900秒内,对数据库进行了至少1次修改save 900 1 # 服务器在300秒内,对数据库进行了至少10次修改save 300 10 # 服务器在60秒内,对数据库进行了至少10000次修改save 60 10000 # bgsave发生错误时是否停止写入,一般为yesstop-writes-on-bgsave-error yes # 持久化时是否使用LZF压缩字符串对象?rdbcompression yes # 是否对rdb文件进行校验和检验,通常为yesrdbchecksum yes # RDB持久化文件名dbfilename dump.rdb # 持久化文件存储目录dir ./

恢复数据机制

只需要将rdb文件放在我们redis启动目录就可以了,redis启动的时候会自动检查文件并恢复其中的数据。

优点

  • RDB是一个非常紧凑的文件,它保存了某个时间点得数据集,非常适用于数据集的备份,比如你可以在每个小时报保存一下过去24小时内的数据,同时每天保存过去30天的数据,这样即使出了问题你也可以根据需求恢复到不同版本的数据集。

  • RDB是一个紧凑的单一文件,很方便传送到另一个远端数据中心或者亚马逊的S3(可能加密),非常适用于灾难恢复。

  • RDB在保存RDB文件时父进程唯一需要做的就是fork出一个子进程,接下来的工作全部由子进程来做,父进程不需要再做其他IO操作,所以RDB持久化方式可以最大化redis的性能。

  • 与AOF相比,在恢复大的数据集的时候,RDB方式会更快一些。

缺点

  • 如果你希望在redis意外停止工作(例如电源中断)的情况下丢失的数据最少的话,那么RDB不适合你。虽然你可以配置不同的save时间点(例如每隔5分钟并且对数据集有100个写的操作),是Redis要完整的保存整个数据集是一个比较繁重的工作,你通常会每隔5分钟或者更久做一次完整的保存,万一在Redis意外宕机,你可能会丢失几分钟的数据。

  • RDB 需要经常fork子进程来保存数据集到硬盘上,当数据集比较大的时候,fork的过程是非常耗时的,可能会导致Redis在一些毫秒级内不能响应客户端的请求。如果数据集巨大并且CPU性能不是很好的情况下,这种情况会持续1秒,AOF也需要fork,但是你可以调节重写日志文件的频率来提高数据集的耐久度。

3、AOF

概念

以日志的形式来记录每个写操作,将Redis执行过的所有指令记录下来(读操作不记录),只许追加文件但不可以改写文件,Redis启动之初会读取该文件重新构建数据,换言之,Redis重启的话就会根据日志文件的内容将写的指令从前到后执行一次以完成数据的恢复工作。

持久化原理

所有操作的命令会追加在文件中。

开启AOF持久化

# 开启aof持久化方式,默认no appendonly no # aof 持久化生成的文件名称appendfilename "appendonly.aof" # 三种持久化机制# appendfsync alwaysappendfsync everyseC# appendfsync no

三种触发持久化机制

  • always

同步持久化,每次发生数据变更会被立即持久化到硬盘中,性能比较差,但是数据完整性好。

  • everysec

异步操作,每秒持久化数据到硬盘一次,可能会丢失一秒的数据。

  • no

从不持久化到硬盘。

AOF文件损坏

如果 aof 文件被破坏,redis服务是启动不了的。redis本身提供了修复了工具redis-check-aof --fix appendonly.aof

优点

  • 根据配置不同的策略,让你选择持久化的方式。

  • AOF文件是一个只进行追加的日志文件,所以不需要写入seek,即使由于某些原因(磁盘空间已满,写的过程中宕机等等)未执行完整的写入命令,你也也可使用redis-check-aof工具修复这些问题。

  • Redis 可以在 AOF 文件体积变得过大时,自动地在后台对 AOF 进行重写: 重写后的新 AOF 文件包含了恢复当前数据集所需的最小命令集合。 整个重写操作是绝对安全的,因为 Redis 在创建新 AOF 文件的过程中,会继续将命令追加到现有的 AOF 文件里面,即使重写过程中发生停机,现有的 AOF 文件也不会丢失。 而一旦新 AOF 文件创建完毕,Redis 就会从旧 AOF 文件切换到新 AOF 文件,并开始对新 AOF 文件进行追加操作。

  • AOF 文件有序地保存了对数据库执行的所有写入操作,这些写入操作以 Redis 协议的格式保存, 因此 AOF 文件的内容非常容易被人读懂,对文件进行分析(parse)也很轻松。导出(export)AOF文件也非常简单:举个例子, 如果你不小心执行了 FLUSHALL 命令, 但只要 AOF 文件未被重写,那么只要停止服务器,移除 AOF 文件末尾的 FLUSHALL 命令,并重启 Redis,就可以将数据集恢复到 FLUSHALL 执行之前的状态。

缺点

  • 对于相同的数据集来说,AOF 文件的体积通常要大于 RDB 文件的体积。

  • 根据所使用的 fsync 策略,AOF 的速度可能会慢于 RDB 。 在一般情况下, 每秒 fsync 的性能依然非常高, 而关闭 fsync 可以让 AOF 的速度和 RDB 一样快, 即使在高负荷之下也是如此。 不过在处理巨大的写入载入时,RDB 可以提供更有保证的最大延迟时间(latency)。

关于如何在Redis中实现持久化问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网精选频道了解更多相关知识。

--结束END--

本文标题: 如何在Redis中实现持久化

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

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

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

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

下载Word文档
猜你喜欢
  • 如何在Redis中实现持久化
    如何在Redis中实现持久化?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1、概述Redis 是内存数据库,如果不能将内存中的数据保存到磁盘中,那么一旦服务器进程退出,服务...
    99+
    2023-06-06
  • redis怎么实现持久化
    本篇内容介绍了“redis怎么实现持久化”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Redis持久化的方...
    99+
    2024-04-02
  • Redis持久化怎么实现
    本篇内容主要讲解“Redis持久化怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Redis持久化怎么实现”吧!Redis是一种高级key-value数据库。它跟memcached类似,不...
    99+
    2023-06-28
  • 如何使用Redis实现数据持久化
    如何使用Redis实现数据持久化引言Redis是一种快速、高效的内存数据库,但默认情况下它的数据是存储在内存中的。这就意味着一旦服务器断电或重启,Redis中的数据将会丢失。为了解决这个问题,Redis提供了一些机制来实现数据的持久化。本文...
    99+
    2023-11-07
    数据 redis 持久化
  • redis如何开启持久化
    redis开启持久化的方法:在redis.conf配置文件中设置开启。开启AOF持久化的配置方法:# 是否开启aofappendonly yes# 文件名称appendfilename "appendonly.aof"# 同步方式appen...
    99+
    2024-04-02
  • redis如何进行持久化
    小编给大家分享一下redis如何进行持久化,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1、redis简介REmote DIctionary Server(Redis) 是一个由Salva...
    99+
    2024-04-02
  • 怎么在Redis中实现持久化与主从复制
    这篇文章给大家介绍怎么在Redis中实现持久化与主从复制,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。为什么需要持久化Redis是基于内存的NoSQL数据库,读写速度自然快,但内存是瞬时的,在redis服务关闭或重启之...
    99+
    2023-06-14
  • Redis怎么实现数据持久化
    Redis 有两种数据持久化的方式:RDB持久化和AOF持久化。 RDB持久化: RDB持久化是通过定期将内存中的数据快照写入磁...
    99+
    2024-05-07
    Redis
  • redis如何持久化数据库
    redis持久化数据库的方法:快照的方式持久化到磁盘,配置代码如下:save 900 1save 300 10save 60 10000上面的配置规则意思如下:# In the example below the behaviour wil...
    99+
    2024-04-02
  • Redis持久化与序列化怎么实现
    Redis持久化和序列化是两个不同的概念,它们分别用于将数据保存到磁盘上以及将数据转换成字节流进行传输。 Redis持久化可以通过两...
    99+
    2024-04-29
    Redis
  • GO怎么实现Redis的AOF持久化
    这篇文章主要介绍“GO怎么实现Redis的AOF持久化”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“GO怎么实现Redis的AOF持久化”文章能帮助大家解决问题。GO实现Redis的AOF持久化将用...
    99+
    2023-07-05
  • redis数据持久化的实现方法
    小编给大家分享一下redis数据持久化的实现方法,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!Redis实现数据持久化的两种实现方式:RDB:指定的时间间隔内保存数据快照AOF:先把命令追加到...
    99+
    2024-04-02
  • Redis持久化实例分析
    本篇内容介绍了“Redis持久化实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!面试官:小伙子,谈谈...
    99+
    2024-04-02
  • 如何在Storm中实现数据的持久化存储
    在Storm中实现数据的持久化存储通常可以通过以下几种方法: 使用数据库:可以将Storm处理的数据存储到关系型数据库(如MySQ...
    99+
    2024-04-09
    Storm
  • 在Unity中如何实现数据的持久化存储
    在Unity中实现数据的持久化存储可以通过以下几种方式: PlayerPrefs:Unity自带的一种简单的持久化存储方案,可以存...
    99+
    2024-05-09
    Unity
  • redis持久化文件在哪里
    redis持久化文件在配置文件中可查看路径。例如:# The filename wherre to dump the DBdbfilename dump.rdb //文件名# The working directory.## The DB ...
    99+
    2024-04-02
  • 如何查看redis是否持久化
    小编给大家分享一下如何查看redis是否持久化,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!    &nbs...
    99+
    2024-04-02
  • Redis如何配置快照持久化
    本篇内容介绍了“Redis如何配置快照持久化”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!redis持久化整体上来说,redis持久化有两种...
    99+
    2023-06-19
  • 如何在mysql中设置持久化
    如何在mysql中设置持久化?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1、持久化的设置MySQL的设置可以在运行时通过SET GLOBAL命令来更改,但是这...
    99+
    2023-06-15
  • 如何在ApacheBeam中实现数据的持久化和恢复
    在Apache Beam中,可以使用不同的数据存储和处理引擎来实现数据的持久化和恢复。以下是一些常见的方式: 使用文件系统:可以将...
    99+
    2024-03-11
    Beam
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作