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

4.常用数据结构和单线程模型理解

Redis目前10种value类型,string,list,set,hash,sorted set,stream,geospatial,hyperloglog,bitmaps,bitfields。

redis针对数据结构底层实现的特化

在源码层面,redis对数据结构实现与常见实现方式有差异,目的是为了节省内存/提高效率。它依旧保证容器的特性不变,只不过实现有差异(数据结构形不变,编码方式变)。

1.常见数据结构及其内部编码

string:
raw:最基本的字符串,底层实现持有一个char数组。

int:8字节整型存储(可用来实现计数功能)

embstr:针对短字符串的特殊优化(只读字符串,进行修改了编码变为raw

hash:

hashtable:最基本的哈希表

ziplist:当哈希表内元素个数比较少,节省内存

为什么要压缩?

redis上有很多key,可能某些key的value是hash,hash本身是很浪费内存的(有空位置),在数据量不大时,使用ziplist可以在不影响效率的情况下节省内存。

list:

linkedlist:传统链表

ziplist:压缩列表

自redis3.2之后,引入了quicklist,兼顾了上述两者的优点。

set:

hashtable

intset:集合中存的都是整数(升序存放数字,查找时二分查找

zset:

skiplist:跳表(5.跳表(skiplist)_跳表(skiplist) + 哈希表-CSDN博客)

ziplist

查看编码命令:object encoding key

不需要记住数字,只记思想;因为数字是可配置的,为什么用这个数字才是重要的。

2.redis单线程模型理解

redis只使用一个线程处理所有的命令;不是说redis服务器内部就只有一个线程;redis6.0及以上,网络IO是多线程的。

2.1 命令处理没有线程安全问题

两个客户端即便同时请求redis服务器,但因为redis处理命令是单线程的;两个命令一定是串行执行的,没有线程安全问题。

2.2 命令处理用单线程原因和弊端

redis核心业务逻辑都是短平快的,不是很吃CPU资源。

弊端:redis命令操作过长会阻塞其他命令的执行。

2.3 redis单线程模型为什么效率高?(面试题)

核心:参照物是数据库(MySQL,Oracle,sql server等)

1)内存访问速度比访问硬盘快

2)核心功能比数据库更简单(数据库增删改查都有权限概念,复杂很多)

3)单线程模型,避免了一些不必要的线程竞争
4)网络采用的是IO多路复用技术(epoll,有大量socket但只有少部分活跃)

http://www.cnnetsun.cn/news/174726.html

相关文章:

  • LLMs之Survey之Agent:《Measuring Agents in Production》翻译与解读
  • 零代码上手Google Gemini 3:5种实用方法大揭秘
  • “你用的那个AI,到底把你坑了还是救了?”——解锁宏智树论文的协作新范式
  • 好写作AI:别等学校采购了!你的论文“救命神器”自己就能用上
  • Windows系统文件GdiPlus.dll丢失或损坏 下载修复方法
  • 研究生必备8款AI写论文神器:5分钟生成25000字问卷类论文,自动生成高信度数据
  • 【BuildFlow 筑流】unitrix_macros库 Cargo.toml 配置详解及依赖库用法
  • 《开发者出海必看:如何优雅地搞定海外服务支付?(保姆级干货)》
  • Thinkphp和Laravel企业防爆安全设备信息系统
  • Thinkphp和Laravel全家桶鲜花售卖商城系统vue
  • 记录我适配iOS26遇到的一些问题
  • 通过命令模拟pod创建
  • 同步机无感 STM32 低成本 MD500E 永磁同步控制方案大揭秘
  • 小宝玩具 【通达信、源码 、主图、附图】
  • 使用 Github Pages 和 Hexo
  • 审稿 一区期刊注意事项: journal offers the option to connec;please note, reviewers are not expected 是什么意思
  • 线性代数:多维世界的变形工具箱
  • 力扣题目142. 环形链表 II​的解法分享,附图解
  • MATLAB电力系统继电保护之自动重合闸
  • 10 个AI写作工具,助你轻松搞定继续教育论文!
  • 【开题答辩全过程】以 基于Vue的茶道知识科普网站的设计与实现为例,包含答辩的问题和答案
  • 主动配电网两阶段鲁棒恢复:Matlab 代码探索之旅
  • ICG-20660L加速度+陀螺仪六轴IMU传感器原理图设计,已量产(加速度传感器)
  • 百度AI架构师亲授:Agentic智能体在医疗领域的落地(附诊断案例)
  • 软件工程期末高频易错点深度剖析:避开这些坑,你就赢了!
  • 打破 AI 创作枷锁!虎贲等考 AI 双效赋能,让学术原创不设限
  • AI 赋能学术演示!虎贲等考 AI PPT,让科研汇报告别 “无效努力”
  • 听完这场AI产品大会,我觉得如果不赚钱,所谓的提效真的毫无意义。
  • PWN手的成长之路-19-int_overflow
  • Thinkphp和Laravel党员素质能力提升管理系统vue