| |
|
开发:
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动态字符串SDS数据结构
SDS的优势1.获取数组长度常数时间复杂度c语言数组,依赖结尾\0判断长度,每次获取长度都需要遍历数组。 2.防止缓冲区溢出在使用C语言concat函数时 ,需要程序员自己保证内存空间是足够,否则就会溢出 sds的api,可以保证拼接前,将buf数组扩容,因此可以保证不会内存溢出 3 减少的内存重分配次数sds有两种优化策略 2.惰性空间释放 4 二进制安全我们知道c语言数组存储结构 是没有记录长度的,而是依靠结束符判断数组边界 5 兼容部分C字符串函数总结链表数据结构字典字典实现hash表hash表节点hash冲突在不断加入新数据的过程中,为了减小hash表的负载因子,程序会通过rehash操作对hash表的大小进行拓展或伸缩。 rehhashe操作该操作就用到了字典中的 h【0】 和 h【1】。 负载因子=ht【0】.used / ht【0】.size 扩展:ht[1] >= ht[0].used*2 的 2^n ? ** 在进行渐进式rehash操作期间,在字典中添加新值的时候 会保存在h[1]中,h[0]中的键值对只会减少,不会增加。** 跳表跳表数据结构 整数集合整数集合有序,支持三种长度。且支持长度的升级,插入新元素的时间复杂度为On 压缩列表同整数集合一样压缩列表也不是基础数据结构,而是 Redis 自己设计的一种数据存储结构。它有点儿类似数组,通过一片连续的内存空间,来存储数据。不过,它跟数组不同的一点是,它允许存储的数据大小不同。 压缩列表听到“压缩”两个字,直观的反应就是节省内存。之所以说这种存储结构节省内存,是相较于数组的存储思路而言的。我们知道,数组要求每个元素的大小相同,如果我们要存储不同长度的字符串,那我们就需要用最大长度的字符串大小作为元素的大小(假设是20个字节)。存储小于 20 个字节长度的字符串的时候,便会浪费部分存储空间。 数组的优势占用一片连续的空间可以很好的利用CPU缓存访问数据。如果我们想要保留这种优势,又想节省存储空间我们可以对数组进行压缩。 但是这样有一个问题,我们在遍历它的时候由于不知道每个元素的大小是多少,因此也就无法计算出下一个节点的具体位置。这个时候我们可以给每个节点增加一个lenght的属性。 如此。我们在遍历节点的之后就知道每个节点的长度(占用内存的大小),就可以很容易计算出下一个节点再内存中的位置。这种结构就像一个简单的压缩列表了。 redis压缩列表注意,字符数组的长度,的几个区间,编码长度为1字节,例如字符长度可以为小于63的任何长度,如果为2字节,字符数组长度边长 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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 10:03:13- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |