5.Redis之常用数据结构单线程模型

  • 围绕每个数据结构介绍相关命令
  • 当前版本的redis支持10个数据类型

  • Redis 底层在实现上述数据结构的时候,
  • 会在源码层面,针对上述实现进行特定的优化,来达到 节省时间/节省空间 效果,
  • 内部的具体实现的数据结构(编码方式),还会有变数
  • redis 承诺,现在我这有个 hash 表,你进行 査询,插入, 删除 操作,都保证 O(1)
  • 但是,这个背后的实现,不一定就是一个标准的 hash 表.(内部可能会进行优化)
  • 可能再特定场景下,使用别的数据结构实现.
  • 但是仍然保证时间复杂度符合承诺!!

1.数据结构对应的编码方式 

内部编码方式,redis内部自适应

1.1 object encoding key

査看 key 对应的 value 的实际编码方式

redis 会自动根据当前的实际情况选择内部的编码方式.自动适应的,

2.单线程模型的工作过程

redis 只使用一个线程,处理所有的命令请求.

不是说一个 redis 服务器进程内部真的就只有一个线程,

其实也有多个线程,多个线程是在处理 网络IO

假设, 有多个客户端, 同时操作一个 redis 服务器

redis 能够使用 单线程模型 很好的工作,原因主要在于 redis 的核心业务逻辑, 都是短平快的~~不太消耗 cpu 资源也就不太吃多核了!!!【特殊情况,特殊处理具体问题,具体分析】

弊端!!redis 必须要特别小心,某个操作占用时间长,就会阻塞其他命令的执行!!

3.单线程为什么那么快(面试题)

快是相对而言(相对于数据库mysql)

1.redis 访问内存,数据库则是访问硬盘,

2.redis 核心功能,比数据库的核心功能更简单.

数据库对于数据的插入删除査询....都有更复杂的功能支持, 这样的功能势必要花费更多的开销比如,针对插入删除,数据库中的各种约束,都会使数据库做额外的工作,

redis 干的活少,提供的功能相比于 mysql 也是少了不少~~

3. 单线程模型,避免了一些不必要的线程竞争开销.

redis 每个基本操作,都是短平快的~~ 就是简单操作一下内存数据,不是什么特别消耗 cpu 的操作.就算搞多个线程,也提升不大~~

4. 处理网络IO 的时候, 使用了 epoll 这样的IO 多路复用机制~

  • 【示例】

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

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

相关文章

【Java EE】网络协议——HTTP协议

目录 1.HTTP 1.1HTTP是什么 1.2理解“应用层协议” 1.3理解HTTP协议的工作过程 2.HTTP协议格式 2.1抓包工具的使用 2.2抓包工具的原理 2.3抓包结果 3.协议格式总结 1.HTTP 1.1HTTP是什么 HTTP(全称为“超文本传输协议”)是一种应用非常广泛的应…

如何利用GitHubAction来发布自己的Python软件包

我们开发的python软件包如果想发布到网上,可以让其他人通过pip install下载,一般是把软件包发布到PYPI平台。 PYPI准备 我们要现在pypi注册登录一下 文件组织架构 一般的python软件包的文件组织架构为包名文件夹__init__.py程序,包文件夹的…

Django与前端框架协作开发实战:高效构建现代Web应用

title: Django与前端框架协作开发实战:高效构建现代Web应用 date: 2024/5/22 20:07:47 updated: 2024/5/22 20:07:47 categories: 后端开发 tags: DjangoREST前端框架SSR渲染SPA路由SEO优化组件库集成状态管理 第1章:简介 1.1 Django简介 Django是一…

论文阅读--ActionCLIP

原来的动作识别问题在于标注太难太贵,将动作表示为短语的latent space太大 本文的贡献:(1)将CLIP的image encoder换成video encoder,方法与CLIP4Clip几乎一样 (2)CLIP的ground truth来自于文本…

urllib_post请求_百度翻译之详细翻译

百度翻译有一个详细翻译的接口: post请求: 请求参数(较多): 打印之后,发现有问题: 改一下请求头: 将Accept-Encoding注释掉,因为我们使用的是utf-8编码: 加上…

F28034中断

DSP中断 中断中断概述中断机制 中断 当CPU正在执行程序时,由于发生了某种随机的事件(外部或内部),使CPU的执行中断,转而去执行某一段特殊的程序(中断子程序或中断处理程序),以处理该…

轻型web服务器搭建 阿里云

1.购买云服务器 2.远程连接云服务器 重置实例密码 重置后要重启服务器 登录云服务器 密码就是刚刚重置的 3.安装宝塔面板 宝塔面板 - 简单好用的Linux/Windows服务器运维管理面板 (bt.cn) 回车则开始安装,过程中会多次让输入y表示确认下一步,过程大概2…

windows使用gzip和bzip2对文件进行压缩

git软件 git bash:下载地址https://git-scm.com/downloads,安装时一路next。 这个软件是给程序员提交代码用的工具,内置linux系统的命令行,可以使用linux系统特有的压缩软件gzip和bzip2. gzip使用 gzip一般用于压缩tar包&#…

基于机器学习的一线城市租房价格预测分析与实现,实现三种算法预测

本文旨在基于机器学习方法,对一线城市租房价格进行预测分析,并使用Matplotlib可视化、随机森林、一元线性回归和多元线性模型进行模型对比。通过爬取北京链家二手房数据作为研究对象,探讨了租房价格与各种因素之间的关系,阐述了研…

【YOLOv10训练教程】如何使用YOLOv10训练自己的数据集并且推理使用

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…

【气象常用】间断时间序列图

效果图: 主要步骤: 1. 数据准备:随机数组 2. 图像绘制:绘制间断的时间序列 详细代码:着急的直接拖到最后有完整代码 步骤一:导入库包及图片存储路径并设置中文字体为宋体,西文为新罗马&…

冷干机使用中的注意事项

冷干机使用中的注意事项 使用冷干机时,以下是几个注意事项: 安装位置:选择一个通风良好、温度适宜的位置安装冷干机。确保周围环境没有过多的灰尘、腐蚀性气体或其他污染物,以免对冷干机的正常运行和寿命产生不利影响。 电源要求…

C++ STL 函数对象:隐藏的陷阱,如何避免状态带来的麻烦?

STL 函数对象:无状态即无压力 一、简介二、函数对象三、避免在函数对象中保存状态3.1、函数对象3.2、lambda 表达式 四、选择合适的更高层次的结构五、总结 一、简介 在使用 C 标准模板库 (STL) 时,函数对象 (Function Object) 是一种强大的工具&#x…

02324 自学考试 离散数学屈婉玲教材 目录

02324 自学考试 离散数学屈婉玲教材 目录 02324 自学考试 离散数学屈婉玲教材 02324离散数学全程班历年真题资料

技术面试,项目实战,求职利器

之前找工作一直想找一个能真正系统性学开发的地方,之前毕业找工作的时候无意间碰到下面这个网站,感觉还挺不错的,用上面的技术实战内容应对技术面试,也算是求职利器了。有需要的可以自取: https://how2j.cn?p156336 实…

VMware虚拟机中ubuntu使用记录(10)—— 如何在Ubuntu18.04中使用自己的单目摄像头运行ORB_SLAM3(亲测有效,踩坑记录)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、ORB_SLAM3源码编译二、ORB_SLAM3实时单目相机测试1. 查看摄像头的话题2. 运行测试 三. 运行测试可能的报错1. 报错一(1) 问题描述(2) 原因分析(3) 解决 2. …

SWM320系列应用

一、Swm320系列 SPI 应用 现象:应用SWM320的SPI1的模式0作为从机,整体产品硬件平台同步上电,从机的SPI无法正常工作,进不了中断,手工复位一次或连接SWD调试就正常了,这样的情况应该怎么解决?其…

Windows远程连接命令?

Windows操作系统提供了多种远程连接命令,使用户可以通过网络连接到远程计算机,并在远程操作系统上执行操作。远程连接命令可方便实现远程工作、故障排查和系统维护等任务。本文将介绍几种常见的Windows远程连接命令及其基本使用方法。 远程连接命令 Win…

C语言 | Leetcode C语言题解之第112题路径总和

题目: 题解: bool hasPathSum(struct TreeNode *root, int sum) {if (root NULL) {return false;}if (root->left NULL && root->right NULL) {return sum root->val;}return hasPathSum(root->left, sum - root->val) ||ha…