Redis数据结构之Dict字典

简介

字典(Dict),是一种用于保存键值对(key-value pair)的抽象数据结构,其应用于将一个键(key)映射为一个值,从而形成关联性。

在字典中,每个键都是独一无二的,通过独一无二的特性来获取、更新、删除与之关联的值。
键的独一无二特性取决于哈希函数的随机性,当我们实现自己的字典时,哈希函数是实现的一大关键。

字典这种结构通常内置在各个高级语言,比如c++的Map、java的Map,都是字典。

字典在redis中的应用场景

Redis的实现语言为C,因此Redis的作者自己实现了字典这个数据结构。

redis数据库

Redis的数据库采用字典作为底层实现,其增、删、改、改操作都是通过字典进行操作的。

typedef struct redisDb {
   
    // 数据库键空间,保存着数据库中的所有键值对
    dict *dict;                 /* The keyspace for this DB */
    // 键的过期时间,字典的键为键,字典的值为过期事件 UNIX 时间戳
    dict *expires;              /* Timeout of keys with a timeout set */
    // 正处于阻塞状态的键
    dict *blocking_keys;        /* Keys with clients waiting for data (BLPOP) */
    // 可以解除阻塞的键
    dict *ready_keys;           /* Blocked keys that received a PUSH */
    // 正在被 WATCH 命令监视的键
    dict *watched_keys;         /* WATCHED keys for MULTI/EXEC CAS */
    struct evictionPoolEntry *eviction_pool;    /* Eviction pool of keys */
    // 数据库号码
    int id;                     /* Database ID */
    // 数据库的键的平均 TTL ,统计信息
    long long avg_ttl;          /* Average TTL, just for stats */
} redisDb;

redis作为nosql,其数据库结构 redisDb 采用dict来存储数据库中的所有键值对。

通过源码搜索下dict类型,便可以知道redis在哪些部分使用到了dict,redis的源码地址:

你可能感兴趣的:(数据结构,redis,数据结构,数据库,源码,哈希表设计)