深入底层C源码剖析Redis底层数据结构

本文深入探讨了Redis的基本特性,包括其作为非关系型键值对数据库的高效性,内存存储,多种键值对类型,以及丰富的内置功能如复制、持久化和高可用性方案。同时,详细介绍了RedisDb数据结构,如dict、redisDb、dictEntry和redisObject等,揭示了Redis内部数据管理的机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Redis 基本特性

        1. 非关系型的键值对数据库,可以根据键以O(1) 的时间复杂度取出或插入关联值

        2. Redis 的数据是存在内存中的

        3. 键值对中键的类型可以是字符串,整型,浮点型等,且键是唯一的

        4. 键值对中的值类型可以是string,hash,list,set,sorted set 等

        5. Redis 内置了复制,磁盘持久化,LUA脚本,事务,SSL,  ACLs,客户端缓存,客户端代理等功能

        6. 通过Redis哨兵和Redis Cluster 模式提供高可用性

RedisDb 数据结构

typedef struct redisDb {    

        dict *dict;                      

        dict *expires;              

        dict *blocking_keys;              

        dict *ready_keys;              

        dict *watched_keys;            

        int id;                          

        long long avg_ttl;              

        unsigned long expires_cursor;      

        list *defrag_later;          

} redisDb;

typedef struct dict {    

        dictType *type;    

        void *privdata;    

        dictht ht[2];    

        long rehashidx;    

        unsigned long iterators;      

} dict;

typedef struct dictht {    

        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;        

                double d;    

        } v;    

        struct dictEntry *next;

} dictEntry;

typedef struct redisObject {    

        unsigned type:4;    

        unsigned encoding:4;    

        unsigned lru:LRU_BITS;      

        int refcount;    

        void *ptr;

} robj;

String数据结构:

 List数据结构:

 Hash数据结构:

 SkipList:

 ZipList:

 待完善!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值