赞
踩
在实际开发,
Redis
使用会频繁,那么在使用过程中我们该如何正确抉择数据类型呢?哪些场景下适用哪些数据类型。而且在面试中也很常会被面试官问到Redis数据结构方面的问题:
当我们分析理解了Redis
数据结构,可以为了我们在使用Redis
的时候,正确抉择数据类型使用,提升系统性能。
Redis
底层数据结构Redis
是一个内存键值key-value
数据库,且键值对数据保存在内存中,因此Redis
基于内存的数据操作,其效率高,速度快;
其中,Key
是String
类型,Redis
支持的 value
类型包括了 String
、List
、 Hash
、 Set
、 Sorted Set
、BitMap
等。Redis
能够之所以能够广泛地适用众多的业务场景,基于其多样化类型的value
。
而Redis
的Value
的数据类型是基于为Redis
自定义的对象系统redisObject
实现的,
- typedef struct redisObject{
- //类型
- unsigned type:4;
- //编码
- unsigned encoding:4;
- //指向底层实现数据结构的指针
- void *ptr;
- …..
- }
redisObject
除了记录实际数据,还需要额外的内存空间记录数据长度、空间使用等元数据信息,其中包含了 8 字节的元数据和一个 8 字节指针,指针指向具体数据类型的实际数据所在位置:
image.png
其中,指针指向的就是基于Redis
的底层数据结构存储数据的位置,Redis
的底层数据结构:SDS
,双向链表、跳表,哈希表,压缩列表、整数集合实现的。
那么Redis底层数据结构是怎么实现的呢?
我们先来看看Redis
比较简单的SDS
,双向链表,整数集合。
SDS
、双向链表和整数集合SDS
,使用len
字段记录已使用的字节数,将获取字符串长度复杂度降低为O(1),而且SDS
是惰性释放空间的&#
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。