Redis | @所有人 奇淫数据类型

Redis是一款事件驱动型的数据库服务器,基于key-value实现存储,相比于RDB和AOF持久化方式,文件事件和时间事件的灵活调度,以及键过期时间等知识,真正让我喜欢上它的是内部数据类型,字符串对象、列表对象、哈希对象、集合对象以及有序集合对象,均可选择合适的内部数据类型存储,将其称为奇淫数据类型真不为过,一看究竟吧!

一、简单动态字符串

SDS:用于字符串对象

相比于C字符串,SDS增加free和len变量,具有什么意义呢?且听我娓娓道来:

1)获取字符串长度的复杂度由O(N)降为O(1)

C字符串获取其长度,需从头遍历至尾部;而SDS字符串,直接获取len值即可;

2)杜绝缓冲区溢出和减少内存分配次数

C字符串的拼接、修改和截断操作,首先需要进行内存分配操作,产生大量的系统调用;

SDS的空间预分配和惰性释放策略,有效解决多次内存分配问题;

空间预分配原则:修改后的SDS的len值小于1M视为a,则分配与len值等大的未使用空间,即free为a,此时SDS的buf大小为(2a+1)字节;修改后的SDS的len值大于1M视为A,则分配1M的未使用空间,即free为1M,此时SDS的buf大小为(A+1M+1)字节;(1字节用于空字符串存储)

惰性释放原则:free值大于0时,并不立即回收,等待下一次使用;存在API用于释放free空间,避免造成内存浪费;

3)二进制安全

C字符串仅用于存储文本文件,SDS字符串也可以用于存储二进制文件,二进制文件与文本文件区别 ,简单来说,文本文件是基于固定长度的编码方式,二进制文件是自定义的编码方式

4)兼容部分C字符串函数

C字符串与SDS均保持字符串末尾均以空字符结束,可以兼容部分C字符串函数

二、链表

链表:用于列表键、慢查询和监视器等

三、整数集合

整数集合:实现集合键方式之一

升级操作三步曲:

1)根据新元素类型,扩展底层数据大小,并且为新元素分配空间;

2)将底层所有元素进行升级,转换为新类型后,以有序的方式放置到合适位置;

3)将新元素添加到底层数组中;

四、字典

字典:数据库和哈希键

1)哈希算法

根据键值对的键计算出哈希值,由哈希值和表大小掩码进行与操作确定索引位置;

2)键冲突解决

若不同的键生成相同的哈希值,产生相同的索引位置,使用链地址法解决;出于速度考虑,将新的键值对添加在表头位置;

3)rehash(将负载因子稳定在合适范围内)

将rehashidx值由-1置为0,开始进行rehash操作;如果是扩展,则ht[1]的大小为第一个大于等于ht[0].used * 2的2的n次方的数,如果是收缩,则ht[1]的大小为第一个大于等于ht[0].used的2的n次方的数;基于新的哈希值和表大小掩码计算索引位置;ht[0]中所有键值对迁移结束后,释放ht[0],将ht[1]更改为ht[0],创建新的ht[1]

4)渐进式rehash(将rehash操作均摊在对键值对的增删改查上)

添加操作在ht[1]中进行,保证ht[0]中键值对数量只减不增;删除、查找和修改操作先在ht[0]中进行,没有查找到,再在ht[1]中进行;具体的操作细节,在阅读源码之后方可确定

五、跳跃表

跳跃表:有序集合键和集群节点中内部数据结构

六、压缩列表

压缩列表:存储小整数和短字符串

本文是对于《Redis设计与实现》中关于数据类型的简单总结,具体可以参考Redis设计与实现,而关于Redis中常见的操作,可以参照Redis命令查询。转眼间,本学期已经进入期末考试复习阶段,这一学期广泛学习了很多东西。伴随着期末复习的热潮,开始本学期所学内容的梳理和温习。向上吧!少年。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 228,606评论 6 533
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 98,582评论 3 418
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 176,540评论 0 376
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 63,028评论 1 314
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 71,801评论 6 410
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 55,223评论 1 324
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 43,294评论 3 442
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 42,442评论 0 289
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 48,976评论 1 335
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 40,800评论 3 354
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 42,996评论 1 369
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 38,543评论 5 360
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 44,233评论 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 34,662评论 0 26
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 35,926评论 1 286
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 51,702评论 3 392
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 47,991评论 2 374

推荐阅读更多精彩内容