01-Redis核心数据结构与高性能原理

一、Redis的单线程和高性能

1. Redis是单线程吗?

Redis的单线程主要是指 Redis 的网络 IO 和键值对读写是由一个线程来完成的(说白了也就是执行命令的时候是由一个线程来完成的),这也是 Redis 对外提供键值存储服务的主要流程。
但 Redis 的其他功能,比如持久化、异步删除、集群数据同步等,其实是由额外的线程执行的-即多线程执行

2. Redis单线程为啥还这么快?

因为它所有的数据都在内存当中,所有的运算也都是内存级别的运算,并且单线程也避免了多线程之间切换导致的性能损耗,同时正因为redis是单线程 所以要小心使用redis的指令,对于那些耗时的指令,一定要谨慎使用,避免导致redis的卡顿
同时redis采用io多路复用模型,redis是用epoll来实现io多路复用,**将连接信息和事件放到队列当中,由文件事件分派器监听并分发给事件处理器,**说白了就是监听压队列,然后由文件事件分派器来去处理,并将事件分发到事件处理器,而事件处理器包括连接应答处理器,命令请求处理器,命令回复处理器;

在这里插入图片描述

二、Redis的核心数据结构

1. Redis 五种数据类型的应用场景:

String 类型的应用场景:缓存对象、常规计数、分布式锁、共享 session 信息等。

List 类型的应用场景:消息队列(但是有两个问题:1. 生产者需要自行实现全局唯一 ID;2. 不能以消费组形式消费数据)等。
比如说可以实现栈–lpush+lpop===》FIFO
实现队列=====》Lpush+Rpop
实现阻塞队列====》Lpush+Bpop
那它相比于普通的栈,队列有啥优点?就是在分布式环境下,我们是不能java实现的堆栈功能,就可以使用redis
在这里插入图片描述

Hash 类型:缓存对象、购物车等。

Set 类型:聚合计算(并集、交集、差集)场景,比如点赞、共同关注、抽奖活动等。
可以用于抽奖,但是注意SRANDMEMBER 不会删除元素,而SPOP会删除元素-所以说SRANDMEMBER适合那种中奖多次的情况,而SPOP适合那种不能再中奖的情况;
在这里插入图片描述
同时还可用于微博点赞,收藏 标签等
在这里插入图片描述
同时非常重要的是redis集合操作实现微博微信关注模型-即共同关注,可能认识的好友等

Zset 类型:排序场景,比如排行榜、电话和姓名排序等。

2. zset结构用于排行榜的原理

zset结构即sorted set有序集合它有个权重值,也就是说可以根据元素的权重来排序,比如说,我们可以根据元素插入 Sorted Set 的时间确定权重值,先插入的元素权重小,后插入的元素权重大。
在面对需要展示最新列表、排行榜等场景时,如果数据更新频繁或者需要分页显示,可以优先考虑使用 Sorted Set。
它典型的使用场景就是排行榜。例如学生成绩的排名榜、游戏积分排行榜、视频播放排名、电商系统中商品的销量排名等。

3. zset结构底层数据结构

Zset 类型的底层数据结构是由压缩列表或跳表实现的:
即如果有序集合的元素个数小于 128 个,并且每个元素的值小于 64 字节时,Redis 会使用压缩列表作为 Zset 类型的底层数据结构;
如果有序集合的元素不满足上面的条件,Redis 会使用跳表作为 Zset 类型的底层数据结构;
当然在redis7.0中,压缩列表数据结构已经废弃了,是由listpack数据结构来实现

4. 跳表的时间复杂度是多少?

在这里插入图片描述
搜索操作的时间复杂度:O(log n),其中n是跳表中元素的数量。这是因为跳表中使用多级索引,可以通过跳跃的方式快速定位到目标元素所在的位置,从而将搜索的时间复杂度降低到对数级别。

插入和删除操作的时间复杂度:O(log n),其中n是跳表中元素的数量。与搜索操作类似,插入和删除操作也可以通过跳跃的方式快速定位到需要插入或删除的位置,并进行相应的操作。因此,插入和删除的时间复杂度也是对数级别的。

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

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

相关文章

基于epoll实现Reactor服务器

了解epoll底层逻辑 在我们调用epoll_create的时候会创建出epoll模型,这个模型也是利用文件描述类似文件系统的方式控制该结构。 在我们调用epoll_create的时候,就会在内核管理中创建一个epoll模型,并且建管理模块地址给file结构体&#xff…

python数据分析基础

前言 2023年10月以来,一位在商学院就读的可爱同学遇上了一门课——python数据分析,并遇到了许多问题,找上了我,就此,我也开始了学习之路,虽然很浅显,但这些东西对部门同学来说也是受用的&#…

TypeScript中的单件设计模式

基本概念 (1) 了解设计模式 设计模式通俗的讲,就是一种更好的编写代码方案,打个比喻:从上海到武汉,你可以选择做飞机,做轮船,开车,骑摩托车多种方式,把出行…

短视频购物系统源码:构建创新购物体验的技术深度解析

短视频购物系统作为电商领域的新宠,其背后的源码实现是其成功的关键。本文将深入探讨短视频购物系统的核心技术和源码设计,以揭示其如何构建创新购物体验的技术奥秘。 1. 技术架构与框架选择 短视频购物系统的源码首先考虑的是其技术架构。常见的选择…

ExoPlayer架构详解与源码分析(10)——H264Reader

系列文章目录 ExoPlayer架构详解与源码分析(1)——前言 ExoPlayer架构详解与源码分析(2)——Player ExoPlayer架构详解与源码分析(3)——Timeline ExoPlayer架构详解与源码分析(4)—…

AI大模型:启动参数总结整理

虽然通过调整启动大模型的参数,对生成效果的提升是有限的,但适当的调整,还是能满足一些常用的场景的~ 一. 【max_length】 令牌生成最大数 用于控制生成文本的最大长度,默认为 20。它的值对应于输入提示的长度加上max_new_token…

10_企业架构NOSQL数据库之MongoDB

企业架构NOSQL数据库之MongoDB 学习目标和内容 1、能够简单描述MongoDB的使用特点 2、能够安装配置启动MongoDB 3、能够使用命令行客户端简单操作MongoDB 4、能够实现基本的数据操作 5、能够实现MongoDB基本安全设置 6、能够操作安装php的MongoDB扩展 一、背景描述及其方案设计…

【AI】以大厂PaaS为例,看人工智能技术方案服务能力的方向(1/2)

目录 一、深度学习能力 二、计算框架 2.1 语音 2.2 OCR 2.3 人脸/体识别 2.4 图像审核 2.5 图像识别 2.6 视频 2.7 自然语言理解 2.8 知识图谱 今天以百度智能云为例,梳理下人工智能技术方案服务能力,主要有哪些方向的应用和拓展。 纯属学习&…

JDK 9 模块化系统 (Module System) 和 多版本兼容 Jar (Multi-Release Jar)

博文目录 文章目录 Module System原因JDK 模块化模块描述文件关键字 启用模块化测试结论 Multi-Release jar (MRJAR)原因原理结论用 IDEA 创建多版本兼容 Jar项目结构pom.xml测试 Module System 原因 Java 9引入了模块化系统的主要原因是为了解决Java平台面临的复杂性和可维…

OpenCV图像相似性比对算法

背景 在做图像处理或者计算机视觉相关的项目的时候,很多时候需要我们对当前获得的图像和上一次的图像做相似性比对,从而找出当前图像针对上一次的图像的差异性和变化点,这需要用到OpenCV中的一些图像相似性和差异性的比对算法,在O…

C练习题13

单项选择题(本大题共20小题,每小题2分,共40分。在每小题给出的四个备选项中,选出一个正确的答案,并将所选项前的字母填写在答题纸的相应位置上。) 1.结构化程序由三种基本结构组成、三种基本结构组成的算法是() A.可以完成任何复杂的任务 B. 只能完成部分复杂的任务 C. 只能完…

打破常规思维:Scrapy处理豆瓣视频下载的方式

概述 Scrapy是一个强大的Python爬虫框架,它可以帮助我们快速地开发和部署各种类型的爬虫项目。Scrapy提供了许多方便的功能,例如请求调度、数据提取、数据存储、中间件、管道、信号等,让我们可以专注于业务逻辑,而不用担心底层的…

TrustZone之物理地址空间

除了两个安全状态外,该体系结构还提供了两个物理地址空间:安全和非安全。 在非安全状态下,虚拟地址始终转换为非安全物理地址。这意味着在非安全状态下的软件只能看到非安全资源,但永远看不到安全资源。如图所示: 在安…

大数据Doris(三十三):Doris高级设置

文章目录 Doris高级设置 一、增大内存

准确!!!在 CentOS 8 上配置 PostgreSQL 14 的主从复制

在 CentOS 8 上配置 PostgreSQL 14 的主从复制,并设置 WAL 归档到特定路径 /home/postgres/archive 的步骤如下: 主服务器配置(主机) 配置 PostgreSQL: 编辑 postgresql.conf 文件: vim /data/postgres/p…

Java二阶知识点总结(一)Maven

一、Maven概念 Maven是一个项目管理工具,其主要作用有2点 依赖管理:管理项目依赖的各种jar包自动构建:项目构建的过程,从编译、测试、运行、打包到安装的过程可以一键执行 二、Maven工程的目录结构 src/main/java:…

H5ke13-1浏览器处理异常

window对应的error没有event对象 window对应的error他接收三个参数,msg,url,行号 return false return true 1就不会返回错误 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>Title</title>&…

使用 MITRE ATTCK® 框架缓解网络安全威胁

什么是MITRE ATT&CK框架 MITRE Adversarial Tactics&#xff0c; Techniques&#xff0c; and Common Knowledge&#xff08;ATT&CK&#xff09;是一个威胁建模框架&#xff0c;用于对攻击者用来入侵企业、云和工业控制系统&#xff08;ICS&#xff09;并发起网络攻击…

探索人工智能领域——每日20个名词详解【day10】

目录 前言 正文 总结 &#x1f308;嗨&#xff01;我是Filotimo__&#x1f308;。很高兴与大家相识&#xff0c;希望我的博客能对你有所帮助。 &#x1f4a1;本文由Filotimo__✍️原创&#xff0c;首发于CSDN&#x1f4da;。 &#x1f4e3;如需转载&#xff0c;请事先与我联系以…

正则表达式(5):常用符号

正则表达式&#xff08;5&#xff09;&#xff1a;常用符号 小结 本博文转载自 在本博客中&#xff0c;”正则表达式”为一系列文章&#xff0c;如果你想要从头学习怎样在Linux中使用正则&#xff0c;可以参考此系列文章&#xff0c;直达链接如下&#xff1a; 在Linux中使用正…