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

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 多路复用机制~

  • 【示例】

相关文章:

  • Java整合ELK实现日志收集 之 Elasticsearch、Logstash、Kibana
  • 为 AWS 子账户添加安全组修改权限
  • 深入探索SQL注入:盲注技术及其防御策略
  • 程序员做副业要知道重点在哪里
  • 区间预测 | Matlab实现DNN-KDE深度神经网络结合核密度估计多置信区间多变量回归区间预测
  • 永久代你不知道的东西
  • 哈希表---闭散列
  • colmap在windows上编译好的程序直接可以运行支持cuda
  • Spring是怎么处理循环依赖的
  • 【车载以太网测试从入门到精通】——SOME/IP协议测试
  • 聊聊Python中的lambda函数的使用以及模块和包是什么?
  • F28034中断
  • 深入理解内联函数(C语言)
  • YOLO系列模型疑问
  • python:__set_name__使用
  • 网络传输文件的问题
  • 收藏网友的 源程序下载网
  • [deviceone开发]-do_Webview的基本示例
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • canvas 五子棋游戏
  • ES6 学习笔记(一)let,const和解构赋值
  • Idea+maven+scala构建包并在spark on yarn 运行
  • input的行数自动增减
  • JavaScript设计模式与开发实践系列之策略模式
  • Laravel 实践之路: 数据库迁移与数据填充
  • node和express搭建代理服务器(源码)
  • orm2 中文文档 3.1 模型属性
  • Python3爬取英雄联盟英雄皮肤大图
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • Vue 动态创建 component
  • Vue2 SSR 的优化之旅
  • 订阅Forge Viewer所有的事件
  • 给Prometheus造假数据的方法
  • 关于List、List?、ListObject的区别
  • 浏览器缓存机制分析
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 为视图添加丝滑的水波纹
  • 小程序button引导用户授权
  • 一个完整Java Web项目背后的密码
  • 与 ConTeXt MkIV 官方文档的接驳
  • C# - 为值类型重定义相等性
  • ​比特币大跌的 2 个原因
  • #13 yum、编译安装与sed命令的使用
  • #git 撤消对文件的更改
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • $.ajax()
  • (+4)2.2UML建模图
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (4) PIVOT 和 UPIVOT 的使用
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (Oracle)SQL优化技巧(一):分页查询
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (分布式缓存)Redis持久化