ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

redis数据结构

2020-10-22 07:31:36  阅读:149  来源: 互联网

标签:数组 压缩 redis 列表 跳表 哈希 数据结构


目录

基本数据结构包括:String(字符串)、List(列表)、Hash(哈希)、Set(集合)和 Sorted Set(有序集合)

基本数据结构 底层实现
string 动态字符串
List 双向链表、压缩列表
Hash 哈希表,压缩列表
Sorted Set 跳表,压缩列表
Set 哈希表、数组

redis中的键值对采用哈希表,哈希表就是一个数组,数组的每个元素称为一个哈希桶,每个哈希桶中保存了键值对数据的指针。
哈希冲突采用链式哈希。同一个哈希桶中的多个元素用一个链表来保存,它们之间依次用指针连接。
冲突增多时,Redis 会对哈希表做渐进式 rehash操作。rehash 也就是增加现有的哈希桶数量,让逐渐增多的 entry 元素能在更多的桶之间分散保存,减少单个桶中的元素数量,从而减少单个桶中的冲突。渐进式 rehash时指拷贝数据时,Redis 仍然正常处理客户端请求,每处理一个请求时,从哈希表 1 中的第一个索引位置开始,顺带着将这个索引位置上的所有 entries 拷贝到哈希表 2 中;等处理下一个请求时,再顺带拷贝哈希表 1 中的下一个索引位置的 entries

压缩列表

压缩列表实际上类似于一个数组,数组中的每一个元素都对应保存一个数据。和数组不同的是,压缩列表在表头有三个字段 zlbytes、zltail 和 zllen,分别表示列表长度、列表尾的偏移量和列表中的 entry 个数;压缩列表在表尾还有一个 zlend,表示列表结束。

压缩列表是在内存中分配一块地址连续的空间,然后把集合中的元素一个接一个地放在这块空间内,非常紧凑。

跳表

跳表在链表的基础上,增加了多级索引,通过索引位置的几个跳转,实现数据的快速定位。

复杂度

各个数据结构的查找时间复杂度

数据结构 复杂度
哈希表 O(1)
跳表 O(logN)
双向链表 O(N)
压缩列表 O(N)
数组 O(N)

标签:数组,压缩,redis,列表,跳表,哈希,数据结构
来源: https://www.cnblogs.com/hainingwyx/p/13855823.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有