黑马Redis原理篇

黑马Redis原理篇

  • 1、数据结构
    • 1.1、动态字符串SDS
    • 1.2、IntSet
    • 1.3、Dict
    • 1.4、ZipList
    • 1.5、QuickList
    • 1.6、SkipList
    • 1.7、RedisObject
    • 1.8、五种数据结构
      • 1. String(小EMBSTR,大RAW (SDS),少量整数INT)
      • 2. List(Redis3.2之后使用QuickList实现)
      • 3. Set(少量整数IntSet,正常采用Dict,元素存在key中,value为null)
      • 4. ZSet(少量数据使用ZipList,使用Dict和SkipList)
      • 5. Hash(少量数据ZipList,大量数据Dict)
  • 2、网络模型
    • 2.1、用户空间和内核空间
    • 2.2、阻塞IO
    • 2.3、非阻塞IO
    • 2.4、IO多路复用
      • 2.4.1 Linux中的I/O多路复用
      • 2.4.1 epoll中的事件通知机制
    • 2.5、信号驱动IO
    • 2.6、异步IO
    • IO操作同步异步总结(重要)
    • 2.7、Redis网络模型(I/O多路复用+事件派发)
  • 3、通信协议
    • 3.1、RESP协议
  • 4、内存策略
    • 4.1、过期策略
    • 4.2、淘汰策略


1、数据结构

1.1、动态字符串SDS

Redis是基于C语言实现的。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.2、IntSet

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

1.3、Dict

在这里插入图片描述在这里插入图片描述在这里插入图片描述渐近式rehash:
在这里插入图片描述在这里插入图片描述

1.4、ZipList

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

1.5、QuickList

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

1.6、SkipList

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

1.7、RedisObject

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

1.8、五种数据结构

1. String(小EMBSTR,大RAW (SDS),少量整数INT)

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

2. List(Redis3.2之后使用QuickList实现)

在这里插入图片描述

3. Set(少量整数IntSet,正常采用Dict,元素存在key中,value为null)

在这里插入图片描述

4. ZSet(少量数据使用ZipList,使用Dict和SkipList)

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

5. Hash(少量数据ZipList,大量数据Dict)

在这里插入图片描述


2、网络模型

2.1、用户空间和内核空间

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

2.2、阻塞IO

在这里插入图片描述

2.3、非阻塞IO

在这里插入图片描述

2.4、IO多路复用

2.4.1 Linux中的I/O多路复用

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

2.4.1 epoll中的事件通知机制

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

2.5、信号驱动IO

在这里插入图片描述

2.6、异步IO

在这里插入图片描述

IO操作同步异步总结(重要)

在这里插入图片描述

2.7、Redis网络模型(I/O多路复用+事件派发)

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


3、通信协议

3.1、RESP协议

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


4、内存策略

4.1、过期策略

在这里插入图片描述
Redis 通过一个叫做过期字典(可以看作是 hash 表)来保存数据过期的时间。

惰性删除:不是在TTL到期后就立刻删除,而是在访问一个key的时候,检查该key的存活时间,如果已经过期才执行删除。这样对 CPU 最友好,但是可能会造成太多过期 key 没有被删除。
定期删除:每隔一段时间抽取一批 key 执行删除过期 key 操作。并且,Redis 底层会通过限制删除操作执行的时长和频率来减少删除操作对 CPU 时间的影响。

定期删除的两种模式:

  1. SLOW模式执行频率默认为10,每次不超过25ms
  2. FAST模式执行频率不固定,但两次间隔不低于2ms,每次耗时不超过1ms
    在这里插入图片描述

4.2、淘汰策略

内存淘汰:就是当Redis内存使用达到设置的上限时,主动挑选部分key删除以释放更多内存的流程。Redis会在处理客户端命令的方法processCommand()中尝试做内存淘汰
在这里插入图片描述


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

electron 使用electron-packager打linux-x64包与linux-arm64包,解决打包缓慢问题

使用electron-packager打linux-x64包与linux-arm64包,解决下载zip打包缓慢问题 在使用electron-packager打包的过程中,需要在第一次下载electron版本对应的zip文件,下载很缓慢,而且还可能出现每次都在下载zip的情况 解决思路是提前下载好zip文…

【Jmeter第三章】Jmeter给请求添加请求头

给请求加上请求头最常见的场景就是在请求头上添加token了,这里也拿添加token来举例 1、添加某个请求的请求头 1、选中HTTP请求,右键添加 2、添加请求头 2、添加公共的请求头信息 其实步骤和上面是一样的,只不过是选择:线程组…

Midjourney提示词资源、使用技巧、艺术家资源网站收录

为了帮助艺术家们使用Midjourney更专业、准确地创作更完美的艺术作品,我们收录了一些Midjourney提示词资源分享、提示词书写技巧、相关专业工具,同时还有一些相关艺术家资源帮艺术家们找到创作灵感。有很多是社区内资深玩家分享的云文档,资源…

2023彩虹易支付最新原版安装教程(内附源码)

此源码已通过检查,确认无后门,且所有代码开源,无加密文件。 测试日期 2023年5月21日 源码已扫描无后门,不放心的也可以自己再去扫描一遍 2023年5月22日 各个功能接口测试完毕,均可用 选中下方可查看下载链接 http…

初识linux之网络基础概念

目录 一、网络发展 1. 独立模式 2. 网络互联 二、认识协议 1. 为什么要有协议 2. 什么是协议 三、网络协议初识 1. 协议分层 2. 协议分层的优点 3. 理解分层 4. OSI七层模型 4.1 概念 4.2 模型形式 4.3 各层的作用 5. TCP/IP五层(或四层&#xff09…

23 KVM管理虚拟机-使用VNC密码登录虚拟机

文章目录 23 KVM管理虚拟机-使用VNC密码登录虚拟机23.1 概述23.2 前提条件23.3 操作步骤 23 KVM管理虚拟机-使用VNC密码登录虚拟机 本章介绍使用VNC密码登录虚拟机的方法。 23.1 概述 当虚拟机操作系统安装部署完成之后,用户可以通过VNC协议远程登录虚拟机&#…

HTTP介绍、原理

HTTP 与 HTTPS 有哪些区别? HTTP 是超文本传输协议,信息是明文传输,存在安全风险的问题。HTTPS 则解决 HTTP 不安全的缺陷,在 TCP 和 HTTP 网络层之间加入了 SSL/TLS 安全协议,使得报文能够加密传输。HTTP 连接建立相…

C++编译和链接

目录 一、源代码的组织 ①头文件(*.h) ②源文件(*.cpp) ③主程序(main函数所在的程序) ④从源代码到可执行文件,编译的过程有三大步骤: 1)编译预处理 2&#xff09…

Matlab - Plot in plot(图中画图)

Matlab - Plot in plot(图中画图) 这是在MATLAB中创建一个嵌入式图形的示例,可以在另一个图形中显示。 与MATLAB中的“axes”函数相关。 Coding % Create data t linspace(0,2*pi); t(1) eps; y sin(t);% Place axes at (0.1,0.1) with w…

Winform窗体利用WebApi接口实现ModbusTCP数据服务

在上位机开发过程中,有时候会遇到需要提供数据接口给MES或者其他系统,今天跟大家分享一下,如何在Winform等桌面应用程序中,开发WebApi接口,提供对外modbus设备的数据服务。通讯模型是: 为了更好地演示应用场…

Qt- QSS样式表用法及用例说明

这里写自定义目录标题 QSS样式表用法1.Qt样式表语法2.选择器3.属性列表4.冲突解决5.全局添加QSS QSS样式表用法 整理qss样式表语法知识,方便今后查看。 1.Qt样式表语法 Qt样式表支持各种属性、伪状态和子控件,可以自定义小部件的外观 selector { attr…

Day01 关系型数据MySQL简介与多平台安装配置

文章目录 第一章 数据库简介1.1 数据库的简介1.2 数据库的分类 第二章 数据库的安装与配置2.1 安装: Windows版2.2 卸载: Windows版2.3 安装: Mac直装版2.4 卸载: Mac直装版2.5 安装: Mac Homebrew版2.6 卸载: Mac Homebrew版2.7 启动、停止mysql服务2.8 登录到MySQL2.9 修改密…

【dcdc】AP2813 DCDC降压恒流芯片 两路输出 一路恒流 一路瀑闪 电动摩托汽车灯方案

1,方案来源:深圳市世微半导体有限公司 汤巧 2,产品描述 AP2813 是一款双路降压恒流驱动器,高效率、外围简单、内置功率管,适用于 5-80V 输入的高精度降压 LED 恒流驱动芯片。内置功率管输出最大功率可达12W,最大电流…

从零开始学习JVM(五)-运行时数据区的方法区

1. 方法区基本介绍 官方文档:The Java Virtual Machine Specification 《Java虚拟机规范》中明确说明:“尽管所有的方法区在逻辑上是属于堆的一部分,但一些简单的实现可能不会选择去进行垃圾收集或者进行压缩。”但对于HotSpotJVM而言&…

webpack将vue3单页面应用改造成多页面应用

上篇文章搞了个单页面vue,现在要将其改成多页面,只是简单尝试,给了例子 其实也就是改个webpack的入口和html模版的配置,其他的话,每个页面都有自己的vue和路由实例,pinia的话就共享吧 !import…

Java版本电子招标采购系统源代码—企业战略布局下的采购寻源

智慧寻源 多策略、多场景寻源,多种看板让寻源过程全程可监控,根据不同采购场景,采取不同寻源策略, 实现采购寻源线上化管控;同时支持公域和私域寻源。 询价比价 全程线上询比价,信息公开透明,可…

# 性能诊断 JProfiler 工具使用

性能诊断 JProfiler 工具使用 JProfiler是一个重量级的JVM监控工具,提供对JVM精确监控,其中堆遍历、CPU剖析、线程剖析看成定位当前系统瓶颈的得力工具。可以统计压测过程中JVM的监控数据,定位性能问题。 官网地址:Java Profiler…

shallowRef和shallowReactive的使用?

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、 shallowRef?二、 shallowReactive?在什么时候使用? 三、案例1、shallowRef2、shallowReactive 提示:以下是本篇…

App Store上线APP流程

现在App Store上已经有数百万款应用,因此对于App的规范要求也越来越高,对于新上线的APP需要满足这些规则并不是件容易的事。今天和大家分享这方面的知识,希望大家喜欢。北京木奇移动技术有限公司,专业的软件外包开发公司&#xff…

浙大数据结构第六周之初识图

题目详情:06-图1 列出连通集 给定一个有N个顶点和E条边的无向图,请用DFS和BFS分别列出其所有的连通集。假设顶点从0到N−1编号。进行搜索时,假设我们总是从编号最小的顶点出发,按编号递增的顺序访问邻接点。 输入格式: 输入第1…