首页 > 代码库 > redis学习-字典

redis学习-字典

1.字典作用

  1. 实现数据库键空间(key space);
  2. 用作 Hash 类型键的底层实现之一;

2.字典实现的数据结构

typedef struct dict {    // 特定于类型的处理函数    dictType *type;    // 类型处理函数的私有数据    void *privdata;    // 哈希表(2 个)    dictht ht[2];    // 记录 rehash 进度的标志,值为 -1 表示 rehash 未进行    int rehashidx;    // 当前正在运作的安全迭代器数量    int iterators;} dict;

/* * 哈希表 */typedef struct dictht {    // 哈希表节点指针数组(俗称桶,bucket)    dictEntry **table;    // 指针数组的大小    unsigned long size;    // 指针数组的长度掩码,用于计算索引值    unsigned long sizemask;    // 哈希表现有的节点数量    unsigned long used;} dictht;

/* * 哈希表节点 */typedef struct dictEntry {    // 键    void *key;    // 值    union {        void *val;        uint64_t u64;        int64_t s64;    } v;    // 链往后继节点    struct dictEntry *next;} dictEntry;
digraph hash_table_example {    // setting    rankdir = LR;    node[shape=record, style = filled];    edge [style = bold];    // nodes    dict [label="dict | type | privdata |<ht> ht[2] | rehashidx: -1 | iterators: 0", fillcolor = "#A8E270"];    ht0 [label="<dictht>dictht |<table> table | size: 4 | sizemask: 3 | used: 3", fillcolor = "#95BBE3"];    ht1 [label="<dictht>dictht |<table> table | size: 0 | sizemask: 0 | used: 0", fillcolor = "#95BBE3"];    bucket [label="<head>dictEntry**\n(bucket) |<table0> 0 |<table1> 1 |<table2> 2 |<table3> 3 ", fillcolor = "#F2F2F2"];    pair_1 [label="<head>dictEntry |{key1 | value1 |<next>next}", fillcolor = "#FADCAD"];    pair_2 [label="<head>dictEntry |{key2 | value2 |<next>next}", fillcolor = "#FADCAD"];    pair_3 [label="<head>dictEntry |{key3 | value3 |<next>next}", fillcolor = "#FADCAD"];    null0 [label="NULL", shape=plaintext];    null1 [label="NULL", shape=plaintext];    null2 [label="NULL", shape=plaintext];    null3 [label="NULL", shape=plaintext];    tnull1 [label="NULL", shape=plaintext];    // lines    dict:ht -> ht0:dictht [label="ht[0]"];    dict:ht -> ht1:dictht [label="ht[1]"];    ht0:table -> bucket:head;    ht1:table -> tnull1;    bucket:table0 -> pair_1:head; pair_1:next -> null0;    bucket:table1 -> null1;    bucket:table2 -> pair_2:head; pair_2:next -> null2;    bucket:table3 -> pair_3:head; pair_3:next -> null3;}
 

redis学习-字典