当前位置: 首页 > news >正文

黑马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()中尝试做内存淘汰
在这里插入图片描述


相关文章:

黑马Redis原理篇

黑马Redis原理篇 1、数据结构1.1、动态字符串SDS1.2、IntSet1.3、Dict1.4、ZipList1.5、QuickList1.6、SkipList1.7、RedisObject1.8、五种数据结构1. String(小EMBSTR,大RAW (SDS),少量整数INT)2. List(Redis3.2之后使用QuickList实现&#…...

Sql Server增加字段、修改字段、修改类型、修改默认值

1、修改字段名: alter table 表名 rename column A to B 2、修改字段类型: alter table 表名 alter column 字段名 type not null 3、修改字段默认值   alter table 表名 add default (0) for 字段名 with values 如果字段有默认值,则需要…...

计算机网络第一章(谢希仁第8版学习)

作者:爱塔居 专栏:计算机网络 作者简介:大三学生,希望和大家一起加油 文章目录 目录 文章目录 一、网络、互连网、互联网(因特网)的概念 二、因特网的组成 三、交换方式 3.1 电路交换 3.2 分组交换 3.3 电路…...

Java反射机制

文章目录 Java反射机制一、反射的用处二、获取字节码文件对象的三种方式1.Class.forName形式2.class属性获取形式3.Student对象获取形式 三、获取构造方法四、获取成员变量五、获取成员方法六、反射的好处(面试题)七、反射的实例1.泛型擦除2.修改字符串的…...

New:dbForge Edge 2023 4in1 Enterprise Edition Crack

dbForge Edge 2023 4in1 Enterprise Edition 赋予自己开发和管理 SQL Server、MySQL、Oracle 和 PostgreSQL 数据库的广泛能力 dbForge Edge:您的终极多数据库解决方案 让我们来看看。您需要处理多个数据库管理系统。同时,您希望能够灵活有效地处理范围广…...

基于高效率IP路由查找的内容

访问【WRITE-BUG数字空间】_[内附完整源码和文档] 实现最基本的前缀树查找,调研并实现某种IP前缀查找方案,- 基于forwarding-table.txt数据集(Network, Prefix Length, Port) - 本实验只考虑静态数据集,不考虑表的添加或更新- 以前缀树查找结果为基准,检…...

【VLAN如何划分?6个方法帮你解决!好用又简单!】

如何选择交换机?如何根据项目确定网络结构?交换机做为大家工作中最常用的设备之一,关于它的选择,不得不知。 在做项目时都有这样的疑问,因为参数决定了项目预算,常用的园区组网技术也是多种多样。 我们来…...

网络通信概述 -了解网络编程,什么是ip和端口,url

网络:网络就是一种辅助双方或者多方能够连接到一起的工具。 左:单机游戏(无网络) 右:网络游戏 网络编程:网络编程就是,让在不同的电脑上的软件能够进行数据传递,即进程之间的通信。…...

【Windows线程开发】Windows线程同步技术

我们在上一章节中讲解了关于Windows的线程基础,相信大家已经对线程有了基本的概念。这一章节中,我们来讲讲线程同步技术,包括加锁技术(原子锁和互斥体)和事件,信号量。 文章目录 一.原子锁二.互斥体三.事件…...

【数据结构与算法】- 期末考试

课程链接: 清华大学驭风计划 代码仓库:Victor94-king/MachineLearning: MachineLearning basic introduction (github.com) 驭风计划是由清华大学老师教授的,其分为四门课,包括: 机器学习(张敏教授) , 深度学习(胡晓林教授), 计算…...

股票?看我用python采集数据制作成交量图表

前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 开发环境 & 第三方模块: 解释器版本: python 3.8 代码编辑器: pycharm 2021.2 requests: pip install requests 爬虫 pyecharts: pip install pyecharts 数据分析 pandas: pip install pandas 数据分析 基本流…...

C++中的多态,以及多态的实现、以及实现多态的两个特例。

一、 多态是什么? 通俗点说,就是多种形态。具体点就是不同对象完成某种事情,会产生不一样的状态。 举个例子:就好比:买票的时候,普通人、学生、军人等等,他们买票有不同的结果,普通人…...

ESP32-C2系列开发板简介

C2是一个芯片采用4毫米x 4毫米封装,与272 kB内存。它运行框架,例如ESP-Jumpstart和ESP造雨者,同时它也运行ESP-IDF。ESP-IDF是Espressif面向嵌入式物联网设备的开源实时操作系统,受到了全球用户的信赖。它由支持Espressif以及所有…...

AI在狂飙,ChatGPT-4可直接在iPhone上使用啦

今天凌晨,OpenAI 正式在 App Store 推出了 ChatGPT 的 iOS app,瞬间冲上苹果商店免费榜第二名,效率榜第一名。 于是兴致勃勃的去下载体验了一番。整体不错,以后手机使用官方的 ChatGPT 更方便啦!而且使用 GPT4 不再麻…...

【计算机操作系统学习资源汇总】

引言 做优秀资源的搬运工!阅读经典,传承经典! 每个人的水平和理解不同,因此总结的水平也不同,推荐阅读一手资源,有时间尽量啃书。 发现好的资源会持续更新… 看书的一点小建议 1. 《深入理解计算机系统》…...

吴恩达 x OpenAI Prompt Engineering教程中文笔记

Datawhale干货 作者:刘俊君,Datawhale成员 完整课程:《吴恩达ChatGPT最新课程》 🐳Reasons & Importance Important for research, discoveries, and advancement 对研究、发现和进步很重要 Accelerate the scientific resea…...

Everypixel: AI图片搜索引擎

【产品介绍】 Everypixel是一个基于人工智能的图片搜索引擎。可以搜索超过 50 个图片来源的优质的授权图库版权素材图片,还可以使用免费图案功能,找到适合自己需求的可定制无缝图案。 Everypixel利用深度学习和计算机视觉技术,为客户提供先进…...

IOS新建应用

一:Application App。普通app。Document App。打开是记事本类似App。Game。新建游戏相关app。RealityKit为新建一个打开摄像机,一个Ar立方体的应用。 SenceKit为有一架飞机旋转的游戏App。 SpirteKit为一个手指头按上会出一个手指特效的应用。 Metal为一…...

CMake学习笔记:搜索第三方库及头文件路径 find_package()命令

1、find_package命令基本介绍 在实际开发过程中,经常不可避免的会使用到第三方开源库,这些开源库可能是通过apt-get install 命令自动安装到系统目录,也可能是由我们自己下载库的源码然后通过编译安装到指定目录的。 不管哪种方式安装的库文…...

Vue3-黑马(一)

目录: (1)vue3-基础-环境准备 (2)vue3-基础-入门案例 (3)vue3-基础-main.ts (1)vue3-基础-环境准备 vue3的技术选型,它提供了两套API,一个是选…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?

在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)

前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 ​…...

嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)

目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 ​编辑​编辑 UDP的特征 socke函数 bind函数 recvfrom函数(接收函数) sendto函数(发送函数) 五、网络编程之 UDP 用…...

shell脚本质数判断

shell脚本质数判断 shell输入一个正整数,判断是否为质数(素数)shell求1-100内的质数shell求给定数组输出其中的质数 shell输入一个正整数,判断是否为质数(素数) 思路: 1:1 2:1 2 3:1 2 3 4:1 2 3 4 5:1 2 3 4 5-------> 3:2 4:2 3 5:2 3…...