redis数据类型及底层数据结构

原创
admin 3小时前 阅读数 3 #Redis
文章标签 Redis

<a target="_blank" href="https://glio.ithorizon.cn/tag/Redis/"style="color:#2E2E2E">Redis</a>数据类型及底层数据结构

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的数据类型及其底层数据结构,我们可以更好地选用实际需求选择合适的数据类型,优化性能和存储空间。


本文由IT视界版权所有,禁止未经同意的情况下转发

热门