首页 > 数据库 >redis持久化

redis持久化

时间:2023-08-10 22:24:28浏览次数:51  
标签:AOF 持久 文件 redis Redis RDB 硬盘

redis持久化

RDB

  • 过程:
  1. redis使用fork函数复制一份当前进程(父进程)的副本(子进程)
  2. 父进程继续接受并处理客户端发来的命令,而子进程开始将内存中的数据写入硬盘中的临时文件
  3. 当子进程写完所有数据后会用该临时文件替换旧的RDB文件,至此一次快照操作完成

在执行fork的时候操作系统会使用写时复制策略,即fork函数发生的一刻父子进程共享同一内存区域,当父进程要更改其中某片数据时(如执行一个写命令),操作系统会将该片数据复制一份以保证子进程的数据不受影响,所以新的RDB文件存储的是执行fork一刻的内存数据。

redis在进行快照过程中不会修改RDB文件,只有快照结束后才会将旧的文件替换成新的,也就是说任何时候RDB文件都是完整的。RDB文件是经过压缩的二进制文件,所以占用的空间会小于内存中的大小,更加利于传输。

通过RDB方式实现持久化,一旦Redis异常退出,就会丢失最后一次快照以后更改的所有数据。

AOF

开启AOF持久化后每执行一条会更改Redis中数据的命令,Redis就会将该命令写入硬盘中的AOF文件。

当redis对一个数据进行多次修改,产生了多条执行指令,每次都记录下来,会产生冗余,所以每当达到一定条件时Redis就会自动重写AOF文件,这个条件可以在配置文件中配置:

auto-aof-rewrite-percentage 100
auto-aof-rewarite-min-size 64mb

在启动Redis会逐个执行AOF文件中的命令来将硬盘中的数据载入到内存中,载入的速度相较RDB会慢一些。

虽然每次执行更改数据库内容的操作时,AOF都会将命令记录在AOF文件中,但是事实上,由于操作系统的缓存机制,数据并没有真正地写入硬盘,而是进入了系统的硬盘缓存。在默认情况下系统每30秒会执行一次同步操作,以便将硬盘缓存中的内容真正地写入硬盘,在这30秒的过程中如果系统异常退出则会导致硬盘缓存中的数据丢失。一般来讲启用AOF持久化的应用都无法容忍这样的损失,这就需要Redis在写入AOF文件后主动要求系统将缓存内容同步到硬盘中。在Redis中我们可以通过appendfsync参数设置同步的时机:

appendfsync always
appendfsync everysec
appendfsync no

默认情况下Redis采用everysec规则,即每秒执行一次同步操作。always表示每次执行写入都会执行同步,这是最安全也是最慢的方式。no表示不主动进行同步操作,而是完全由操作系统来做(即每30秒一次),这是最快但最不安全的方式。一般情况下使用默认值everysec就足够了,既兼顾了性能又保证了安全。

标签:AOF,持久,文件,redis,Redis,RDB,硬盘
From: https://www.cnblogs.com/zpf253/p/17621732.html

相关文章

  • 在Java中操作Redis_Spring Data Redis使用方式_其他类型的数据操作
        ......
  • 在Centos-linux上下载安装redis
    一、下载参考redis官网提供的操作指南。官网地址https://redis.io/download创建目录下载压缩包wgethttps://download.redis.io/releases/redis-7.0.7.tar.gz解压tarxzfredis-7.0.7.tar.gz二、安装进入文件夹目录,进行编译(注意:此目录下有redis说明文件“README.md”,有时......
  • 在Java中操作Redis_Spring Data Redis使用方式_操作字符串类型的数据
        ......
  • 在Java中操作Redis_Spring Data Redis使用方式_环境搭建
        ......
  • 在Java中操作Redis_Spring Data Redis使用方式_操作步骤说明
        ......
  • Redis 的大 key 如何处理
    介绍 大key并不是指key的值很大,而是key对应的value很大(非常占内存)一般而言,下面这两种情况被称为大key:String类型的值大于10KB;Hash、List、Set、ZSet类型的元素的个数超过5000个;为什么会出现大key数据结构不合理:当使用Redis的字符串类型存储较大的数据时......
  • Redis哨兵机制
    Redis哨兵机制:保障高可用性的守护者在现代分布式系统中,高可用性是至关重要的。Redis作为一个高性能的内存数据库,也需要确保在发生故障时能够保持可用。为了实现这一目标,Redis引入了哨兵机制,这是一个监控和管理Redis实例的分布式系统。本文将深入探讨Redis哨兵机制的工作原理、角色......
  • 什么是Redis,如何使用Redis,SpringBoot如何集成Redis
    官网链接:Redis首先简单理解一下1、什么是redisredis是一种开源的、内存中数据结构存储,用作数据库、缓存和消息代理。redis数据结构包含五大数据类型:字符串、散列、列表、集合、带范围查询的排序集合以及三大特殊数据类型:位图、超级日志、地理空间索引。redis内置复制、Lua脚本......
  • 面试官问:Redis 分布式锁如何自动续期?
    资深面试官:你们项目中的分布式锁是怎么实现的?老任:基于redis的set命令,该命令有nx和ex选项。资深面试官:那如果锁到期了,业务还没结束,如何进行自动续期呢?老任:这个......面试官,您上个问题是啥来着?资深面试官:你们项目中分布式锁是怎么实现的。老任:我们直接使用了Redisson中提供的分布式锁......
  • java 中怎么部署使用redis
    在Java中使用Redis,你需要完成以下步骤来部署和使用Redis:1.下载并安装Redis:你可以从Redis官方网站下载Redis的最新版本,并按照官方文档提供的说明进行安装。2.添加Redis的Java依赖:在你的Java项目中,你需要添加Redis的Java客户端依赖。目前比较常用的JavaRedis客户端有Jedis、Lettuc......