0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Redis持久化AOF原理学习

麦辣鸡腿堡 来源:七哥聊编程 作者:七哥聊编程 2023-10-09 15:02 次阅读
原理

在学习AOF原理前,我们首先要了解 RESP (Redis的序列化协议)

图片

从图中可以看到客户端在调用redis服务端时,传入的命令和 key、value 都会通过 RESP 协议序列化为文本。AOF文件中存储的就是序列化后的reids命令。

AOF同步和RDB类似之处在于都是采用fork进程来处理:

图片

通过这张图,我们知道了Redis是将客户端传入的命令直接写入AOF文件的,那如果同一个key原本值是0,然后改为1,最后在改为2,如果每一条命令都记录不仅毫无意义,同时会使得AOF文件越来越大,所以 Redis 在这块有一个小优化。

AOF重写(优化AOF文件)
set s1 11
set s1 22

上面的操作,如果没有优化之前AOF文件是会将这两个命令按照RESP序列化后存储,如果优化后,则只存储后面一条命令即 set s1 22,同一个key的值被覆盖了,只存储最终结果。

重写过程分析

那如果做到同一个key在AOF文件中只存储最新的值呢?不可能每一次写入文件前去检查一遍删除之前这个key的值吧,这样做效率肯定贼低,我们来看看Redis是怎么做的?

Redis 其实是会定期新创建一个 AOF 文件,然后做 AOF 文件的重写优化,在创建新 AOF 文件的过程中,会继续将命令追加到现有的 AOF 文件里面,即使重写过程中发生停机,现有的 AOF 文件也不会丢失。而一旦新 AOF 文件创建完毕, Redis 就会从旧 AOF 文件切换到新 AOF 文件,并开始对新 AOF 文件进行追加操作。

这个操作不得不说还是玩的66的!大写的服。

优化的触发条件:

那上面说的定期重建 AOF 文件具体的时机是啥时候呢?答案也在配置文件 redis.conf 中,需要如下的配置即可,我已经写了注释,你一眼就能看懂的。

# 表示当前aof文件大小超过上一次aof文件大小的百分之多少的时候会进行重写。如果之前没有重写过,以启动时aof文件大小为准
auto-aof-rewrite-percentage 100
# 限制允许重写最小aof文件大小,也就是文件大小小于64mb的时候,不需要进行优化
auto-aof-rewrite-min-size 64mb
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 内存
    +关注

    关注

    8

    文章

    2767

    浏览量

    72774
  • 数据库
    +关注

    关注

    7

    文章

    3591

    浏览量

    63373
  • Redis
    +关注

    关注

    0

    文章

    362

    浏览量

    10496
收藏 人收藏

    评论

    相关推荐

    Redis坚持持久方式概述

    Redis 持久
    发表于 09-25 17:04

    如何使得redis中的数据不再有

    ,原因是redis持久功能导致的,所谓的持久就是redis在系统关闭的时候把数据存储到硬盘
    发表于 11-05 08:50

    阿里云基于NVM的持久化高性能Redis数据库

    各自业务需求,在读写性能、缓存容量、数据可靠性等方面作出灵活的选择。Redis提供了RDB和AOF两种持久化方式供选择,4.0中更是引入了RDB-AOF混合
    发表于 08-13 15:06 196次阅读

    Redis持久化机制的实现原理和使用技巧

    Redis将数据存储在内存中,宕机或重启都会使内存数据全部丢失, Redis持久化机制用来保证数据不会因为故障而丢失。
    的头像 发表于 09-13 16:42 826次阅读

    Redis持久化分为两种:RDB和AOF

    Redis持久化,一个老掉牙的问题,但是面试官就是喜欢问。这也是我们学Redis必会的一个知识点。
    的头像 发表于 02-21 09:22 437次阅读

    Redis持久化机制介绍

    Redis持久化机制? 为了能够重用Redis数据,或者防止系统故障,我们需要将Redis中的数据写入到磁盘空间中,即持久化。
    的头像 发表于 10-09 11:44 310次阅读
    <b class='flag-5'>Redis</b><b class='flag-5'>持久</b>化机制介绍

    Redis持久化RDB方式介绍

    Redis持久Redis是一个内存数据库,为了保证数据的持久性,它提供了两种持久化方案: RDB 方式(默认) RDB方式是通过快照(
    的头像 发表于 10-09 14:56 262次阅读
    <b class='flag-5'>Redis</b><b class='flag-5'>持久</b>化RDB方式介绍

    redis持久化方式有几种及配置

    Redis是一种内存数据库,为了避免数据丢失,需要将数据持久化到磁盘上。Redis提供了两种持久化方式:RDB快照和AOF日志。下面将详细介
    的头像 发表于 12-04 11:09 333次阅读

    redis两种持久化方式的区别

    的完整性和一致性。 Redis提供了两种持久化方式:RDB(Redis Database)和AOF(Append Only File)。这两种方式各有优劣,下面我们将详细介绍它们的区别
    的头像 发表于 12-04 11:12 251次阅读

    redis持久化方式RDB和AOF的区别

    Redis 是一个高性能的键值对数据库,提供了两种持久化方式:RDB 和 AOF。RDB 是将 Redis 的数据快照保存到磁盘上,而 AOF
    的头像 发表于 12-04 16:25 298次阅读

    redis持久化机制和如何实现持久

    Redis是一款高性能的非关系型数据库,其持久化机制是保证数据在重启后仍能够保存的关键。Redis提供了两种方式来实现持久化:RDB(Redis
    的头像 发表于 12-05 10:02 258次阅读

    redis持久化机制优缺点

    持久化机制:RDB(Redis Database)和AOF(Append Only File)。 RDB持久化机制 RDB是Redis的默认
    的头像 发表于 12-05 10:03 269次阅读

    redis里数据什么时候持久

    Redis是一种开源的高性能、非关系型内存数据库,它使用了键值对存储数据,并且支持多种数据结构。 Redis提供了持久化机制,以确保在服务器重启后数据不会丢失。Redis
    的头像 发表于 12-05 10:05 234次阅读

    云容器redis持久化配置

    丢失。 Redis提供了不同的持久化机制,可以根据需要进行配置。本文将详细介绍云容器中Redis持久化配置及其相关配置项。 一、Redis
    的头像 发表于 12-05 10:07 255次阅读

    redis持久化rdb和aof一起用好处

    Redis是一个流行的内存数据库,它通过使用不同的持久化机制来确保数据的持久性。RDB和AOFRedis中两种常用的
    的头像 发表于 12-05 10:17 323次阅读