首页 > 数据库 >Redis持久化

Redis持久化

时间:2022-12-27 15:44:28浏览次数:45  
标签:文件 持久 fsync AOF Redis 保存 RDB

Redis 为了内存数据的安全考虑,会把内存中的数据以文件形式保存到硬盘中一份,在服务器重启之后会自动把硬盘的数据恢复到内存(redis)的里边。数据保存到硬盘的过程就称为“持久化”。   Redis的持久化分为两种: 一、快照方式(RDB)持久化 优点:

  • 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,但是你可以调节重写日志文件的频率来提高数据集的耐久度.

 

(1)、如何开启RDB持久化:RDB是默认开启的,它的出发条件如下:

  • save 900     1            #900秒内如果超过1个key被修改,则发起快照保存
  • save 300     10          #300秒内超过10个key被修改,发起快照保存
  • save 60       10000    #60秒超过10000个key被修改,发起快照保存 

      

(2)、设置备份的保存位置和备份的文件名

  

(3)、如何手动发起快照

    第一种:登录Redis的情况下,使用命令【bgsave】

    

 

    第二种:未登录Redis的情况,使用【bgsave】

    

 

 

二、追加方式( AOF)持久化

优点:

  • 使用AOF 会让你的Redis更加耐久: 你可以使用不同的fsync策略:无fsync,每秒fsync,每次写的时候fsync.使用默认的每秒fsync策略,Redis的性能依然很好(fsync是由后台线程进行处理的,主线程会尽力处理客户端请求),一旦出现故障,你最多丢失1秒的数据.
  • 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)。

 

(1)、如何开启AOF持久化:找到redis.conf文件

  

  触发条件如下:

  # appendfsync    always     //每次收到写的命令就立即强制写入磁盘,最慢的,但是保证完全的持久化,不推荐使用。   appendfsync       everysec    //每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中,推荐。   #appendfsync     no       //完全依赖 os ,性能最好,持久化没保证

  

 

(2)aof 文件的重写

  因为 AOF 的运作方式是不断地将命令追加到文件的末尾, 所以随着写入命令的不断增加, AOF 文件的体积也会变得越来越大。举个例子, 如果你对一个计数器调用了 100 次 INCR , 那么仅仅是为了保存这个计数器的当前值, AOF 文件就需要使用 100 条记录(entry)。然而在实际上, 只使用一条 SET 命令已经足以保存计数器的当前值了, 其余 99 条记录实际上都是多余的。

为了处理这种情况, Redis 支持一种有趣的特性: 可以在不打断服务客户端的情况下, 对 AOF 文件进行重建(rebuild)。执行 BGREWRITEAOF 命令, Redis 将生成一个新的 AOF 文件, 这个文件包含重建当前数据集所需的最少命令。Redis 2.2 需要自己手动执行 BGREWRITEAOF 命令; Redis 2.4 则可以自动触发 AOF 重写, 具体信息请查看 2.4 的示例配置文件。

 

 

标签:文件,持久,fsync,AOF,Redis,保存,RDB
From: https://www.cnblogs.com/mklblog/p/17008137.html

相关文章

  • redis知识点笔记
    Redis相关复习知识点 相关知识点简介1为什么要使用redis(说redis优点)?2使用redis有什么缺点?3单线程的redis为什么这么快?4redis的数据类型,以及每种数据类型的使......
  • 轻便式Redis Monitor面向研发人员图形可视化监控工具
    redis_monitor​​https://github.com/hcymysql/redis_monitor​​轻便式RedisMonitor面向研发人员图形可视化监控工具,借鉴了LEPUS(天兔)监控平台以及redis-cliinfo命令输......
  • 学习下Redis内存模型
    作者:京东零售吴佳前言redis,对于一个java开发工程师来讲,其实算不得什么复杂新奇的技术,但可能也很少人去深入了解学习它的底层的一些东西。下面将通过对内存统计、内存划......
  • 学习下Redis内存模型
    作者:京东零售吴佳前言redis,对于一个java开发工程师来讲,其实算不得什么复杂新奇的技术,但可能也很少人去深入了解学习它的底层的一些东西。下面将通过对内存统计、内存划分、......
  • Redis网络模型究竟有多强
    如果面试官问我:Redis为什么这么快?我肯定会说:因为Redis是内存数据库!如果不是直接把数据放在内存里,甭管怎么优化数据结构、设计怎样的网络I/O模型,都不可能达到如今这般的执......
  • Docker数据共享与持久化(六)
    接下来介绍如何在Docker内部以及容器之间管理数据,在容器中管理数据主要有两种方式:数据卷(DataVolumes)挂载主机目录(Bindmounts)一、数据卷数据卷是一个可供一......
  • redis保存AtomicInteger对象踩坑及解决详解
    这篇文章主要介绍了redis保存AtomicInteger对象踩坑及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教redis保存AtomicInteger对象踩......
  • K8s持久化存储
    百度网盘链接:https://pan.baidu.com/s/15t_TSH5RRpCFXV-93JHpNw?pwd=8od3 提取码:8od312K8s持久化存储在k8s中为什么要做持久化存储?在k8s中部署的应用都是以pod容器......
  • redis template spring设置
    springboot默认提供了StringRedisTemplate工具类。key和value全部以String的方式进行序列化。ObjectMapper是jackJson的一个工具类。<dependency><groupId>com.......
  • apscheduler mysql 持久化任务
    apschedulermysql持久化任务1、下载第三方包这里使用pymysql连接mysqlpipinstallapschedulerpipinstallpymysqlpipinstallsqlalchemy2、直接参考代码imp......