redis数据类型及底层数据结构
原创
Redis数据类型及底层数据结构
Redis是一种开源的、基于内存的键值存储数据库,它拥护多种数据结构,用于解决各种问题。以下是Redis拥护的首要数据类型及其底层数据结构:
1. 字符串(String)
字符串是Redis中最基本的数据类型,最大可存储512MB的数据。底层数据结构为明了动态字符串(SDS)。
2. 列表(List)
列表是按照插入顺序排序的字符串元素集合。底层数据结构为双向链表或压缩列表(当元素数量较少时)。
// 双向链表结构
typedef struct listNode {
struct listNode *prev;
struct listNode *next;
void *value;
} listNode;
// 压缩列表结构
typedef struct zlentry {
unsigned int prevlen;
unsigned int encoding;
unsigned int len;
unsigned char *ptr;
} zlentry;
3. 集合(Set)
集合是无序的、唯一的字符串元素集合。底层数据结构为哈希表或整数集合(当元素数量较少时)。
// 哈希表结构
typedef struct dict {
dictType *type;
void *privdata;
dictht ht[2];
long rehashidx;
} dict;
// 整数集合结构
typedef struct intset {
uint32_t encoding;
uint32_t length;
int8_t contents[];
} intset;
4. 哈希(Hash)
哈希是一个键值对的集合,其中键和值都是字符串。底层数据结构为压缩列表或哈希表(当字段数量较少时)。
5. 有序集合(ZSet)
有序集合是字符串元素集合,每个元素都会相关性一个double类型的分数,用于排序。底层数据结构为跳跃表或压缩列表(当元素数量较少时)。
// 跳跃表结构
typedef struct zskiplistNode {
robj *obj;
double score;
struct zskiplistNode *backward;
struct zskiplistLevel {
struct zskiplistNode *forward;
unsigned int span;
} level[];
} zskiplistNode;
// 压缩列表结构
// 同上文的压缩列表结构
通过了解Redis的数据类型及其底层数据结构,我们可以更好地选用实际需求选择合适的数据类型,优化性能和存储空间。