| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> Redis:数据结构 -> 正文阅读 |
|
[大数据]Redis:数据结构 |
简单动态字符串SDS在Redis中,使用简单动态字符串(simple dynamic string)作为默认字符串表示。 SDS 结构如下:
SDS保留C字符串以空字符结尾的惯例,结尾所需空间不计算在len长度里。 与C字符串的区别
链表Redis中的链表是双端、无环( head 节点的 prev 指针和 tail 节点的 next 指针都指向 null )、具有多态性(链表节点使用 void* 来保存值)的链表。
字典字典是一种用于保存键值对的抽象数据结构。 Redis字典使用哈希表作为底层实现,一个哈希表里面可以有多个节点,而每个节点就保存了字典中的一个键值对。
从上面的定义我们可以看到字典的哈希表 ht 有2个项,正常情况下只会使用 ht[0] , rehashidx 的值也默认为-1。只有在 rehash 的时候会使用 ht[1] ,并用 rehashidx 记录当前 rehash 的进度。 渐进式 rehash在进行 rehash 的时候,不是马上将 ht[0] 的哈希节点重分配到 ht[1] 的,而是渐进完成的,详细步骤如下:
如下图,为 ht[1] 分配完空间后,将 rehashidx改为0,然后在第一次操作字典的时候,会将 ht[0] 里哈希表索引为0的所有哈希节点(k2)进行 rehash 到 ht[1],然后修改rehashidx=rehashidx+1=1;在第二次操作字典的时候,会将 ht[0] 里哈希表索引为1的所有哈希节点(k0)进行 rehash 到 ht[1],然后修改rehashidx=rehashidx+1=2;一直重复直到遍历完哈希表。 跳跃表跳跃表是一种有序的数据结构,通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的。
示例如下: 整数集合当一个集合只包含整数值元素,且元素数量不多的时候,Redis 会使用整数集合作为集合键的底层实现。
升级若向整数集合新增一个比原本元素的类型都要长的元素的时候,需要先进行升级。具体步骤如下:
好处:提高灵活性(无需重新创建、复制集合),尽可能节约内存(不在一开始就创建最大的内存) 整数集合不支持降级操作,一旦进行了升级,编码就会一直保持升级后的状态,即使原本“大类型”的元素被删除。 压缩列表当一个列表键只包含少量列表项,并且每个列表项要么是小整数,要么是长度较短的字符串,那么Redis就会使用压缩列表来做列表键的底层实现。 压缩列表具体组成如下: 连锁更新阅读文章:https://blog.csdn.net/weixin_45729809/article/details/123789656 参考参考《Redis设计与实现》第一部分:数据结构与对象 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/27 9:21:07- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |