L03_Redis知识图谱

news2024/12/23 20:58:31

这些知识点你都掌握了吗?大家可以对着问题看下自己掌握程度如何?对于没掌握的知识点,大家自行网上搜索,都会有对应答案,本文不做知识点详细说明,只做简要文字或图示引导。


Redis 全景图

Redis 知识全景图都包括什么呢?简单来说,就是“两大维度,三大主线”。

Redis 问题画像

在学习和使用的过程中,你可以完善这张图,把你自己实践或掌握到的新知识点,按照“问题 --> 主线 --> 技术点”的方式梳理出来,放到这张图上。

基础篇

基本架构:一个键值数据库包含什么?


数据结构

有哪些底层数据结构

  • 3.0 版本中 List 对象的底层数据结构由「双向链表」或「压缩表列表」实现;
  • 3.2 版本之后,List 数据类型底层数据结构是由 quicklist 实现;
  • 5.0新设计,7.0 版本之后,压缩列表已废弃,由 listpack 数据结构来实现。

键和值用什么结构组织

为了实现从键到值的快速访问,Redsi 使用了一个哈希表来保存所有键值对。

  • 哈希表的冲突问题和rehash可能带来的操作阻塞**。Redis 解决哈希冲突的方式,就是渐进式 rehash**。
压缩列表


quicklist

通过控制每个链表节点中的压缩列表的大小或者元素个数,来规避连锁更新的问题。因为压缩列表元素越少或越小,连锁更新带来的影响就越小,从而提供了更好的访问性能。

quicklist 会控制 quicklistNode 结构里的压缩列表的大小或者元素个数,来规避潜在的连锁更新的风险,但是这并没有完全解决连锁更新的问题。

listpack

listpack 采用了压缩列表的很多优秀的设计,比如还是用一块连续的内存空间来紧凑地保存数据,并且为了节省内存的开销,listpack 节点会采用不同的编码方式保存不同大小的数据。
listpack 没有压缩列表中记录前一个节点长度的字段了,listpack 只记录当前节点的长度,当我们向 listpack 加入一个新元素的时候,不会影响其他节点的长度字段的变化,从而避免了压缩列表的连锁更新问题

高性能IO模型:为什么单线程的Redis能那么快?

Redis 是单线程,主要指 Redis 的网络 IO 和键值对读写是由一个线程完成的

为什么单线程就能那么快?

  • 一是Redis 大部分操作在内存上完成,并且采用了高效的数据结构;
  • 二是采用多路复用,能保证在网络IO钟可以并发处理大量的客户端请求,实现高吞吐量。

Linux 中的 IO 多路复用机制是一个线程处理多个 IO 流,就是我们经常听到的 select/epoll 机制。简单来说,**在 Redis 中值运行单线程的情况下,该机制允许内核中,同时存在多个监听套接字和已连接套接字。**内核会一直监听这些套接字上的连接请求或数据请求。一旦有请求到达,就会交给 Redis 线程处理,这就实现了一个 Redis 线程处理多个 IO 流。

持久化:AOF日志和RDB快照

AOF 日志


优点

  • 写后日志,可以避免出现记录错误命令的情况
  • 在命令执行后才记录日志,不会阻塞当前的写操作。

风险

  • 刚执行完第一步命令就宕机了,那么这个命令和相应的数据就有丢失的风险。
  • 可能给下一个操作带来阻塞风险,因为AOF也是在主线程中执行的,如果在把日志写入磁盘时,磁盘压力大,就会导致写盘慢,进而导致后续操作无法执行。

分析发现,这两个风险都和AOF写回磁盘时机相关,这就意味着,我们如果能够控制一个写命令执行完后AOF 日志写回磁盘的时

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1877930.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于springboot实现学生用品采购系统项目【项目源码+论文说明】

基于springboot实现学生用品采购系统演示 摘要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装学生用品采购系统软…

STM32CubeMx的学习记录系列(2)- STM32G474RET6

最近有个小比赛,需要用到G4,不过找了一圈没有找到标准库的代码,只能使用hal,用CubeMX来生成配置代码。 共同特点 ARDUINO Uno V3 扩展连接器 ST morpho 扩展引脚接头,可完全访问所有 STM32 I/O 采用LQFP64或LQFP48封…

算法 —— 双指针

目录 移动零 复写零 快乐数 盛最多水的容器 有效三角形的个数 查找总价格为目标值的两个商品 三数之和 四数之和 移动零 下图以样例1为例,看下图如何做到保证非零元素相对顺序前提下,移动零元素。 代码实现如下: class Solution {…

1,Windows-本地Linux 系统(WSL)

目录 第一步电脑设置 第二步安装Ubuntu 第三文件传递 开发人员可以在 Windows 计算机上同时访问 Windows 和 Linux 的强大功能。 通过适用于 Linux 的 Windows 子系统 (WSL),开发人员可以安装 Linux 发行版(例如 Ubuntu、OpenSUSE、Kali、Debian、Arc…

如何有效保护生物医药企业隔离网数据导出的安全性?

生物医药企业的核心数据保护至关重要,企业为了保护内部的核心数据,会将网络进行物理隔离,将企业内⽹与外⽹隔离。⽹络隔离后,仍存在重要数据从内网导出至外网的隔离网数据导出需求。以下是一些需要特别保护的核心数据类型&#xf…

小米平板6系列对比

小米平板6系列目前有4款,分别为6、6 Pro、6 Max、6S Pro。具体对比如下表所示。 小米平板型号66 Pro6 Max6S Pro实物图发布时间2023年4月21日2023年4月21日2023年8月14日2024年2月22 日屏幕大小11英寸11英寸14英寸12.4英寸分辨率2.8K2.8K2.8K3K刷新率144Hz144Hz120…

EtherCAT笔记(四)——EtherCAT数据帧结构

EtherCAT数据包含2B的数据头和44~1948B的数据区。数据区由多个子报文组成。由于EtherCAT本身是通过以太网数据帧的形式传输,因此其协议帧中会携带以太网的帧头。 其中,解释如下: (1)以太网数据帧头:EtherC…

VSCode + GDB + J-Link 单片机程序调试实践

VSCode GDB J-Link 单片机程序调试实践 本文介绍如何创建VSCode的调试配置,如何控制调试过程,如何查看修改各种变量。 安装调试插件 在 VSCode 扩展窗口搜索安装 Cortex-Debug插件 创建调试配置 在 Run and Debug 窗口点击 create a launch.json …

C语言力扣刷题11——打家劫舍1——[线性动态规划]

力扣刷题11——打家劫舍1和2——[线性动态规划] 一、博客声明二、题目描述三、解题思路1、线性动态规划 a、什么是动态规划 2、思路说明 四、解题代码(附注释) 一、博客声明 找工作逃不过刷题,为了更好的督促自己学习以及理解力扣大佬们的解…

日志分析-windows系统日志分析

日志分析-windows系统日志分析 使用事件查看器分析Windows系统日志 cmd命令 eventvwr 筛选 清除日志、注销并重新登陆,查看日志情况 Windows7和Windowserver2008R2的主机日志保存在C:\Windows\System32\winevt\Logs文件夹下,Security.evtx即为W…

有哪些防爬虫的方法

防爬虫的方法有robots.txt文、user-agent过滤、ip限制、验证码、动态页面生成、频率限制、动态url参数和反爬虫技术等。详细介绍:1、robots.txt文件,用于告诉搜索引擎爬虫哪些页面可以访问,哪些页面禁止访问;2、ip限制&#xff0c…

面试-J.U.C包的梳理

1.J.U.C包的梳理 Java.Util.Concurrent包简称JUC (1)JUC整体架构图 (2)分析 Executor:线程执行器,任务执行和调度的框架。Tools下存在executor相关的executors类,用于创建executorservice,scheduleexecutorservice,…

获取 url 地址栏 ? 后面的查询字符串,并以键值对形式放到对象里面

写在前面 在前端面试当中,关于 url 相关的问题很常见,而对于 url 请求参数的问题也很常见,大部分以笔试题常见,今天就根据这道面试题一起来看一下。 问题 获取 url 地址栏?后面的查询字符串,并以键值对形式放到对象…

CICD持续集成(Jenkins+Git+Gogs)

1.Jenkins Jenkins 是一个开源的、用于构建和自动化软件开发流程的持续集成和交付工具。它提供了一个可扩展的平台,用于构建、测试和部署软件项目。通过使用 Jenkins,开发团队可以实现持续集成和交付,自动化构建和测试过程,提高软…

Rust监控可观测性

可观测性 在监控章节的引言中,我们提到了老板、前端、后端眼中的监控是各不相同的,那么有没有办法将监控模型进行抽象、统一呢? 来简单分析一下: 业务指标实时展示,这是一个指标型的数据( metric )手机 APP 上传的数…

springboot在线考试 LW +PPT+源码+讲解

第三章 系统分析 3.1 可行性分析 一个完整的系统,可行性分析是必须要有的,因为他关系到系统生存问题,对开发的意义进行分析,能否通过本系统来补充线下在线考试管理模式中的缺限,去解决其中的不足等,通过对…

三让徐州 | 第8集 | 自古皆有死,人无信不立 | 三国演义 | 逐鹿群雄

🙋大家好!我是毛毛张! 🌈个人首页: 神马都会亿点点的毛毛张 📌这篇博客分享的是《三国演义》文学剧本第Ⅰ部分《群雄逐鹿》的第8️⃣集《三让徐州》的经典语句和文学剧本全集台词 文章目录 1.经典语句2.文学剧本台词…

通过Python脚本实现字符画

效果 讲解: 用于将3D视图的帧缓冲区转换为字符画,并将字符画输出到文本编辑器中。 首先,获取当前绑定的帧缓冲区、视口信息和视图像素。 然后,将像素矩阵转化为字符串,并将字符串写入到文本编辑器中。 设置文本编辑…

【软件测试】白盒测试(知识点 + 习题 + 答案)

《 软件测试基础持续更新中》 最近大家总是催更……,我也是百忙之中给大家详细总结了白盒测试的重点内容! 知识点题型答案,让你用最短的时间,学到最高效的知识! 整理不易,求个三连 ₍ᐢ..ᐢ₎ ♡ 目录 一、…

Oracle数据库使用指南基本概念

学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……) 2、学会Oracle数据库入门到入土用法(创作中……) 3、手把手教你开发炫酷的vbs脚本制作(完善中……) 4、牛逼哄哄的 IDEA编程利器技巧(编写中……) 5、面经吐血整理的 面试技…