秋招突击——第八弹——Redis是怎么运作的

2024-06-23 17:36

本文主要是介绍秋招突击——第八弹——Redis是怎么运作的,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 引言
    • 正文
      • Redis在内存中是怎么存储的
          • 面试重点
      • Redis是单线程还是多线程
          • 面试重点
      • 内存满了怎么办?
        • 面试重点
      • 持久化介绍
        • 面试重点
      • RDB持久化
        • 面试重点
      • AOF日志
        • 面试重点
    • 总结

引言

  • 差不多花了两天把redis给过了,早上也只背了一半,完成回去的时候,在背一会,还有健身的时候在听一会。加油,完成不要睡太晚了,早上起不了,还容易做噩梦。

正文

Redis在内存中是怎么存储的

在这里插入图片描述
dict字典的存储结构

在这里插入图片描述

在这里插入图片描述
添加元素

  • 这个字典对应一下存储结构
    在这里插入图片描述

过期字典

  • 这里所有的key都是指向内存的某一个对象
    在这里插入图片描述
面试重点

set a b 这个数据的存储结构是怎么样的?

  • redis存储是字典结构,set a b之后,a会放在字典对应的偏移位置,b作为对应的value进行存储。

过期的信息会存储在哪里?

  • 如果添加了某一个元素的过期时间,则会立马将key添加到过期字典中,并存储对应的时间戳。

有个key过期事件后,那么既在字典还是过期字典,会有两份吗

  • 这里保存的都是指针,对象的指针,不会重复占用内存。

Redis是单线程还是多线程

  • 执行始终是单线程

为什么用单线程

  • redis的瓶颈是IO操作,并不是CPU操作,基于这个投入产出比,还是使用的单线程。

在这里插入图片描述

为什么单线程还这么快?
在这里插入图片描述

  • 高效的数据结构,保证了访问速度
  • I/O多路复用

Reactor模型

在这里插入图片描述

  • 针对命令可以执行之后,就阻塞,不再管他,这里使用事件通知epoll模式解决不同步的问题。

在这里插入图片描述

  • 每一个请求都会触发,触发之后就会发送到对应的句柄,进行处理。
面试重点

redis是单线程还是多线程

  • 核心处理逻辑,Redis一直是单线程的;某些异步流程从4.0开始用多线程,如UNLINK、FLUSHALL ASYNC等非阻塞操作网络I0解包从6.0开始用的都是多线程

为什么使用单线程

  • 瓶颈在I/0不是CPU,这种情况下,选择多线程成本和复杂性高,综合投入产出比,所以选择了单线程

为什么单线程还那么快?

  • Redis是内存数据库,内存操作本身就很快
  • 同时Redis选了高效的数据结构,很多对象底层有多种实现以应对不同的场景,追求性能的极致。
  • 最后Redis采用了多路复用的机制,使其在网络10操作中能并发处理大量的客户端请求,实现高吞吐量

内存满了怎么办?

在这里插入图片描述

  • 超过了操作系统最大的存储范围时,再继续添加数据
  • 总共有8种淘汰策略

在这里插入图片描述

LRU算法

  • 最近最久未使用的数据优先被淘汰
  • 成本:双链表,巨大内存消耗
  • redis选择近似LRU算法,方式消耗更多内存
    • 每次随机选择特定数量的数据,在选中的数据中最不常用的淘汰
  • 为了提高效率,这里选择维护随机池,大小是16个
    在这里插入图片描述
  • 经过验证,是有效的!
  • 缺陷
    • 只管最近访问时间,不会考虑频率
      在这里插入图片描述

LFU算法

  • 针对LRU的仅考虑访问时间的缺点,做的改良
    • LFU同时记录访问的频率还有上一次访问的时间戳

在这里插入图片描述
在这里插入图片描述

  • 决定效果是访问计数:
    • 根据当前时间和上一次访问时间戳,计算衰减系数
    • 如果被访问到,访问计数有概率增加,100之前每一次访问都会加1,如果超过一百,每次有一定的概率增加1

难度调节
在这里插入图片描述

面试重点

Redis有几种内存回收策略
内存回收,什么时候发起

  • 每次读写的时候,都会检查是否需要释放内存,如果需要,就会触发。

介绍一下LRU回收算法

  • 近似LRU算法,是否需要我继续往下讲讲?
  • 没有淘汰池的情况
  • 增加淘汰池的情况

什么是LFU算法

  • 将访问频率也加入到影响因素中,同时记录访问计数和上一次访问的时间戳。

持久化介绍

是什么?

  • 遇到崩溃重启时,原来已有的数据在重启之后,能够重新恢复。
  • 具有一下几种方式
    • RDB快照
    • AOF日志

RDB和AOF的区别

  • AOF是先写进缓冲区,最后再刷盘,在这段时间会有问题
    在这里插入图片描述
    加载策略
    在这里插入图片描述
  • 不要把潜在的问题埋起来,要暴露出来
面试重点

Redis为什么要持久化

  • 定义 + 场景

RDB和AOF的区别

  • 本质:快照和日志
  • 安全性:在于丢失的文件多少
  • 恢复速度:RDB二进制文件,恢复速度更快
  • 操作的开销

RDB和AOF应该如何选择

  • 混合持久化,尽量保证数据安全
  • 接受分钟级别的丢失,那就RDB
  • 不能只选择的AOF,这样不安全

同时加载AOF和RDB,启动时,会用哪个

  • 只会用AOF,既然开启了AOF,想要保证数据丢失少。即使没有AOF文件,也会创建一个空库,暴露出对应的问题。

RDB持久化

在这里插入图片描述

  • RDB保存到磁盘的文件后缀是RDB

开启RDB

  • 900秒内,有一次操作,会进行RDB的备份
  • 一分钟内,有一万次操作,也会执行RDB
    在这里插入图片描述
  • 使用命令,进行持久化
    • 顶时持久化的模式,是采用后台持久化

在这里插入图片描述

RDB写入流程到底是怎么样的?

  • 先调用fork创建子进程,子进程将数据写入临时文件,然后替代原来的文件,实现写时复制
    在这里插入图片描述
  • 父进程fork创建子进程实现RDB新的创建
    在这里插入图片描述

写时复制

  • 如果fork一条数据后,这个数据是两份吗?并不是,谁写谁复制下,写的时候复制。
  • 谁来更改,谁来复制一份。
  • 子进程不会接受命令的,触发写时复制的,一定是父进程。

在这里插入图片描述

面试重点

RDB是什么?解决了什么问题?

  • 二进制形式的快照

RDB怎么开启

  • 定时(后台持久化)和主动命令

RDB对主流程有什么影响
在这里插入图片描述

RDB写入流程是什么?写时复制的机制。
在这里插入图片描述

AOF日志

开启AOF
在这里插入图片描述
怎么写入AOF
在这里插入图片描述
AOF刷盘策略
在这里插入图片描述

  • 不同写回策略的问题
    在这里插入图片描述

AOF重写
在这里插入图片描述

面试重点

AOF是默认开启的吗

  • RDB是默认开启,AOF是不是

AOF重写是解决什么问题的

  • 重写是用于解决AOF不断膨胀问题,随着命令越来越多,AOF文件越来越大但是很多数据其实不一定都是还有意义的,比如原来seta3,后面又有个seta100,那么前者就不需要再继续了。重写就是通过当前状态,重新生成最新的AOF操作命令记录的过程。

AOF重写流程
在这里插入图片描述

总结

  • 这里的RDB持久化看的有点懵,这个写时复制在背操作系统的时候看过,但是没理解,现在看还是没有理解。
  • 先背着,后续有时间再往下继续看,时间不多了,得继续加快进度。

这篇关于秋招突击——第八弹——Redis是怎么运作的的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1087823

相关文章

AI绘图怎么变现?想做点副业的小白必看!

在科技飞速发展的今天,AI绘图作为一种新兴技术,不仅改变了艺术创作的方式,也为创作者提供了多种变现途径。本文将详细探讨几种常见的AI绘图变现方式,帮助创作者更好地利用这一技术实现经济收益。 更多实操教程和AI绘画工具,可以扫描下方,免费获取 定制服务:个性化的创意商机 个性化定制 AI绘图技术能够根据用户需求生成个性化的头像、壁纸、插画等作品。例如,姓氏头像在电商平台上非常受欢迎,

W外链微信推广短连接怎么做?

制作微信推广链接的难点分析 一、内容创作难度 制作微信推广链接时,首先需要创作有吸引力的内容。这不仅要求内容本身有趣、有价值,还要能够激起人们的分享欲望。对于许多企业和个人来说,尤其是那些缺乏创意和写作能力的人来说,这是制作微信推广链接的一大难点。 二、精准定位难度 微信用户群体庞大,不同用户的需求和兴趣各异。因此,制作推广链接时需要精准定位目标受众,以便更有效地吸引他们点击并分享链接

电脑桌面文件删除了怎么找回来?别急,快速恢复攻略在此

在日常使用电脑的过程中,我们经常会遇到这样的情况:一不小心,桌面上的某个重要文件被删除了。这时,大多数人可能会感到惊慌失措,不知所措。 其实,不必过于担心,因为有很多方法可以帮助我们找回被删除的桌面文件。下面,就让我们一起来了解一下这些恢复桌面文件的方法吧。 一、使用撤销操作 如果我们刚刚删除了桌面上的文件,并且还没有进行其他操作,那么可以尝试使用撤销操作来恢复文件。在键盘上同时按下“C

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

webm怎么转换成mp4?这几种方法超多人在用!

webm怎么转换成mp4?WebM作为一种新兴的视频编码格式,近年来逐渐进入大众视野,其背后承载着诸多优势,但同时也伴随着不容忽视的局限性,首要挑战在于其兼容性边界,尽管WebM已广泛适应于众多网站与软件平台,但在特定应用环境或老旧设备上,其兼容难题依旧凸显,为用户体验带来不便,再者,WebM格式的非普适性也体现在编辑流程上,由于它并非行业内的通用标准,编辑过程中可能会遭遇格式不兼容的障碍,导致操

秋招最新大模型算法面试,熬夜都要肝完它

💥大家在面试大模型LLM这个板块的时候,不知道面试完会不会复盘、总结,做笔记的习惯,这份大模型算法岗面试八股笔记也帮助不少人拿到过offer ✨对于面试大模型算法工程师会有一定的帮助,都附有完整答案,熬夜也要看完,祝大家一臂之力 这份《大模型算法工程师面试题》已经上传CSDN,还有完整版的大模型 AI 学习资料,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

怎么让1台电脑共享给7人同时流畅设计

在当今的创意设计与数字内容生产领域,图形工作站以其强大的计算能力、专业的图形处理能力和稳定的系统性能,成为了众多设计师、动画师、视频编辑师等创意工作者的必备工具。 设计团队面临资源有限,比如只有一台高性能电脑时,如何高效地让七人同时流畅地进行设计工作,便成为了一个亟待解决的问题。 一、硬件升级与配置 1.高性能处理器(CPU):选择多核、高线程的处理器,例如Intel的至强系列或AMD的Ry

速盾高防cdn是怎么解决网站攻击的?

速盾高防CDN是一种基于云计算技术的网络安全解决方案,可以有效地保护网站免受各种网络攻击的威胁。它通过在全球多个节点部署服务器,将网站内容缓存到这些服务器上,并通过智能路由技术将用户的请求引导到最近的服务器上,以提供更快的访问速度和更好的网络性能。 速盾高防CDN主要采用以下几种方式来解决网站攻击: 分布式拒绝服务攻击(DDoS)防护:DDoS攻击是一种常见的网络攻击手段,攻击者通过向目标网

禁止复制的网页怎么复制

禁止复制的网页怎么复制 文章目录 禁止复制的网页怎么复制前言准备工作操作步骤一、在浏览器菜单中找到“开发者工具”二、点击“检查元素(inspect element)”按钮三、在网页中选取需要的片段,锁定对应的元素四、复制被选中的元素五、粘贴到记事本,以`.html`为后缀命名六、打开`xxx.html`,优雅地复制 前言 在浏览网页的时候,有的网页内容无法复制。比如「360

Redis中使用布隆过滤器解决缓存穿透问题

一、缓存穿透(失效)问题 缓存穿透是指查询一个一定不存在的数据,由于缓存中没有命中,会去数据库中查询,而数据库中也没有该数据,并且每次查询都不会命中缓存,从而每次请求都直接打到了数据库上,这会给数据库带来巨大压力。 二、布隆过滤器原理 布隆过滤器(Bloom Filter)是一种空间效率很高的随机数据结构,它利用多个不同的哈希函数将一个元素映射到一个位数组中的多个位置,并将这些位置的值置