| |
|
开发:
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 中的数据结构 |
Redis 设计与实现 — Redis 设计与实现 (redisbook.com) Redis中的五种对象分别是:string、list、hash、set、zset。它们的数据结构是怎样的呢?
1. 字符串stringSDS 简单动态字符串Redis是用C语言编写的,但是Redis当中的字符串则是它自身重新设计的,被称为SDS。 SDS依然以 '\0' 作为字符串结尾,但是包含了free和len属性,以此来满足Redis对于内存安全和运行效率的要求。
Redis字符串底层有三种实现方式,int,embstr,raw。
前面介绍了Redis对象头的概念以及SDS的数据结构。RedisObject中的?ptr?指针将会指向一块SDS,以此来表示一个字符串。
?2. 列表List?列表对象的底层数据结构有两种,ziplist或者linkedlist。Redis列表是双向的。
当列表对象可以同时满足下列两个条件时,列表对象采用压缩链表编码: (1)列表对象保存的所有字符串元素的长度都小于64字节; (2)列表元素保存的元素数量小于512个; 否则采用双端链表编码 3.?哈希对象Hash哈希对象的底层结构可以是ziplist或者hashtable Redis当中的哈希表使用的是拉链法设计,大家可以参考我之前写的两篇博客来了解实现原理: C# 中Dictionary源码详解_郭麻花的博客-CSDN博客 C# 中Hashtable 源码详解_郭麻花的博客-CSDN博客 使用?ziplist实现的hash对象 使用hashtable实现的hash对象? 当哈希对象可以同时满足以下两个条件时,哈希对象使用ziplist编码: (1)哈希对象保存的所有键值对的键和值的字符串长度都小于64字节; (2)哈希对象保存的键值对数量小于512个; 否则使用 hashtable编码。 4. 集合对象Set集合对象的编码可以是intset或者hashtable intset就是整数集合,它的数据结构是这样的: ?当集合对象可以同时满足以下两个条件时,对象使用intset编码:? 1.集合对象保存的所有元素都是整数值。 2. 集合对象保存的元素数量不超过512个。 否则集合对象需要使用hashtable编码。 5.有序集合zsetzset编码可以是ziplist或者skiplist,但当编码是skiplist时,却是由字典和skiplist共同实现的。
字典的好处是提供更高的查询效率,但它并不是有序排列的; skiplist是有序的,对于某些应用场景来说非常合适,但查询效率偏低; 因此,zset使用两者结合的方式来实现: ?当有序集合对象可以同时满足以下两个条件时,对象使用ziplist编码: 1. 有序集合保存的元素数量小于128个 ?2. 有序集合保存的所有元素成员的长度都小于64字节 ?否则将使用skiplist编码 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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/24 1:24:39- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |