一、redis原理之set底层数据结构?

其底层有两种实现方式:

1.当value是整数值时,且数据量不大时使用inset来存储,

2.其他情况都是用字典dict来存储

inset的结构:

typedf struct inset{uint32_t encoding;//编码方式 有三种 默认 INSET_ENC_INT16uint32_t length;//集合元素个数int8_t contents[];//实际存储元素的数组 //元素类型并不一定是ini8_t类型,柔性数组不占intset结构体大小,并且数组中的元//素从小到大排列
}inset;

编码格式encoding:共有三种,INTSET_ENC_INT16、INSET_ENC_INT32和INSET_ENC_INT64三种,分别对应不同的范围。Redis为了尽可能地节省内存,会根据插入数据的大小选择不一样的类型来进行存储。

元素数量length:记录了保存数据的数组contents中共有多少个元素,这样获取个数的时间复杂度就是O(1)。

数组contents:真正存储数据的地方,数组是按照从小到大有序排列的,并且不包含任何重复项。

优点:根据存入的数据大小选择合适的编码方式,且只在必要的时候进行升级操作,节省内存

缺点:升级过程耗费系统资源,还有就是不支持降级,一旦升级就不可以降级

四、redis原理之set底层数据结构相关推荐

  1. 三、redis原理之list底层数据结构

    一.redis原理之list底层数据结构ziplist和quicklist. 快速列表 quicklist[quicklist = 链表+ziplist] 首先在列表元素较少的情况下会使用一块连续的内 ...

  2. 一、redis原理之string底层数据结构SDS

    一.前言 我们说Redis 是用 C 语言写的,,但是对于Redis的字符串,却不是 C 语言中的字符串(即以空字符'\0'结尾的字符数组),它是自定义的数据结构SDS(simple dynamic ...

  3. 【重难点】【Redis 01】为什么使用 Redis、Redis 的线程模型、Redis 的数据类型及其底层数据结构

    [重难点][Redis 01]为什么使用 Redis.Redis 的线程模型.Redis 的数据类型及其底层数据结构 文章目录 [重难点][Redis 01]为什么使用 Redis.Redis 的线程 ...

  4. Redis中ZSet的底层数据结构跳跃表skiplist,你真的了解吗?

    欢迎大家关注我的微信公众号[老周聊架构],Java后端主流技术栈的原理.源码分析.架构以及各种互联网高并发.高性能.高可用的解决方案. 一.前言 老周写这篇文章的初衷是这样的,之前项目中有大量使用 R ...

  5. Redis原理一之内部数据结构

    Redis 内部数据结构 前言 简单动态字符串 双向链表 字典 哈希表实现 跳跃表 单链表 添加索引 redis的跳跃表 小结 整数集合 intset 结构 小结 压缩列表zipList 数组 压缩列 ...

  6. mysql原理(1) mysql底层数据结构

    一.前言 1.1 索引结构及查找算法 一个sql语句在mysql里究竟是如何运行的呢?又是怎么去查找的呢? 其中就涉及到数据库(存储数据)以及查找算法. 先来看一下几种查找算法: 目录查找:类似索引 ...

  7. 深入理解硬盘原理,Mysql索引底层数据结构与算法的来龙去脉(多图)

    前言: 如何触发尽量少的磁盘io 找到数据? 数据库中的索引是什么? 硬盘原理 现在大部分存储设备依然是硬盘 信息存储在硬盘里,把它拆开也看不见里面有任何东西,只有些盘片.假设,你用显微镜把盘片放大, ...

  8. Redis底层数据结构介绍

    文章目录 前言 1. 哈希表 2. 简单动态字符串 使用SDS的好处 对比C字符串 3. 压缩列表 4. 跳表 5. 整数集合.双向链表 Redis数据类型与底层数据结构对照表 前言 一谈到Redis ...

  9. 一文带你深入理解Redis中的底层数据结构,再也不怕不懂数据类型的底层了

    数据结构前言 都说Redis快,因为什么呢?只是因为它是内存数据库,所有操作都是基于内存进行的吗?其实不然,这与它的数据结构也是密不可分的.下面我们就来了解一下Redis的数据结构. Redis 数据 ...

最新文章

  1. 申卫星:“十四五”数字经济高质量发展需要法治护航
  2. git创建与合并分支
  3. 一天一个命令--ifconfig
  4. 浏览器事件循环与node事件循环
  5. 使用MaxCompute Java SDK 执行任务卡住了,怎么办?
  6. 行业观察|智慧屏集中爆发,大屏市场能否迎来破局者?
  7. 高清HDMI接口保护用TVS二极管阵列选型
  8. C#最简单最完整的webservice实例
  9. 广度优先遍历类似于二叉树的_二叉树的各种遍历方法的简单解释
  10. CSS中越界问题经典解决方案
  11. php date 报错,编译安装PHP报错:ext/date/php_date.lo is not a valid libtool object
  12. 来讲讲什么是元数据和主数据
  13. 大华设备播放过程中设置播放速度
  14. 解决克隆RHEL7后网络无法启动问题
  15. Emlog模板fee2.0主题商业版
  16. 【Unity使用UGUI实现王者荣耀UI界面(四)】游戏开始界面
  17. Vue活动倒计时的功能
  18. 计算机毕业设计android的学生考勤请假app(源码+系统+mysql数据库+Lw文档)
  19. 有效沟通技巧慕课答案
  20. (byte)0xaa 0xff

热门文章

  1. Oracle获取指定周次的周几的日期
  2. java计算机毕业设计固定资产管理系统MyBatis+系统+LW文档+源码+调试部署
  3. Java基础之身份证验证
  4. 在线支付系列【3】支付安全之对称和非对称加密
  5. atomiclong 初始化_比AtomicLong更高效的并发计数类LongAdder
  6. CAD梦想画图中的“重画、绘图模式”
  7. HPE战略调整在中国市场初见成效
  8. 标哥的英文名片深深震撼了傲慢的美国人
  9. 你招聘设计师时都问哪些问题?你是怎么招聘设计师大牛的?
  10. 前端向后端传递参数方式 - 表单序列化