四、redis原理之set底层数据结构
一、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底层数据结构相关推荐
- 三、redis原理之list底层数据结构
一.redis原理之list底层数据结构ziplist和quicklist. 快速列表 quicklist[quicklist = 链表+ziplist] 首先在列表元素较少的情况下会使用一块连续的内 ...
- 一、redis原理之string底层数据结构SDS
一.前言 我们说Redis 是用 C 语言写的,,但是对于Redis的字符串,却不是 C 语言中的字符串(即以空字符'\0'结尾的字符数组),它是自定义的数据结构SDS(simple dynamic ...
- 【重难点】【Redis 01】为什么使用 Redis、Redis 的线程模型、Redis 的数据类型及其底层数据结构
[重难点][Redis 01]为什么使用 Redis.Redis 的线程模型.Redis 的数据类型及其底层数据结构 文章目录 [重难点][Redis 01]为什么使用 Redis.Redis 的线程 ...
- Redis中ZSet的底层数据结构跳跃表skiplist,你真的了解吗?
欢迎大家关注我的微信公众号[老周聊架构],Java后端主流技术栈的原理.源码分析.架构以及各种互联网高并发.高性能.高可用的解决方案. 一.前言 老周写这篇文章的初衷是这样的,之前项目中有大量使用 R ...
- Redis原理一之内部数据结构
Redis 内部数据结构 前言 简单动态字符串 双向链表 字典 哈希表实现 跳跃表 单链表 添加索引 redis的跳跃表 小结 整数集合 intset 结构 小结 压缩列表zipList 数组 压缩列 ...
- mysql原理(1) mysql底层数据结构
一.前言 1.1 索引结构及查找算法 一个sql语句在mysql里究竟是如何运行的呢?又是怎么去查找的呢? 其中就涉及到数据库(存储数据)以及查找算法. 先来看一下几种查找算法: 目录查找:类似索引 ...
- 深入理解硬盘原理,Mysql索引底层数据结构与算法的来龙去脉(多图)
前言: 如何触发尽量少的磁盘io 找到数据? 数据库中的索引是什么? 硬盘原理 现在大部分存储设备依然是硬盘 信息存储在硬盘里,把它拆开也看不见里面有任何东西,只有些盘片.假设,你用显微镜把盘片放大, ...
- Redis底层数据结构介绍
文章目录 前言 1. 哈希表 2. 简单动态字符串 使用SDS的好处 对比C字符串 3. 压缩列表 4. 跳表 5. 整数集合.双向链表 Redis数据类型与底层数据结构对照表 前言 一谈到Redis ...
- 一文带你深入理解Redis中的底层数据结构,再也不怕不懂数据类型的底层了
数据结构前言 都说Redis快,因为什么呢?只是因为它是内存数据库,所有操作都是基于内存进行的吗?其实不然,这与它的数据结构也是密不可分的.下面我们就来了解一下Redis的数据结构. Redis 数据 ...
最新文章
- 申卫星:“十四五”数字经济高质量发展需要法治护航
- git创建与合并分支
- 一天一个命令--ifconfig
- 浏览器事件循环与node事件循环
- 使用MaxCompute Java SDK 执行任务卡住了,怎么办?
- 行业观察|智慧屏集中爆发,大屏市场能否迎来破局者?
- 高清HDMI接口保护用TVS二极管阵列选型
- C#最简单最完整的webservice实例
- 广度优先遍历类似于二叉树的_二叉树的各种遍历方法的简单解释
- CSS中越界问题经典解决方案
- php date 报错,编译安装PHP报错:ext/date/php_date.lo is not a valid libtool object
- 来讲讲什么是元数据和主数据
- 大华设备播放过程中设置播放速度
- 解决克隆RHEL7后网络无法启动问题
- Emlog模板fee2.0主题商业版
- 【Unity使用UGUI实现王者荣耀UI界面(四)】游戏开始界面
- Vue活动倒计时的功能
- 计算机毕业设计android的学生考勤请假app(源码+系统+mysql数据库+Lw文档)
- 有效沟通技巧慕课答案
- (byte)0xaa 0xff