Redis源碼分析(三十四)--- redis.h服務端的實現分析(1)

來源:互聯網
上載者:User

標籤:nosql資料庫   redis   記憶體資料庫   結構   

       上次剛剛分析過了用戶端的結構體分析,思路比較簡答,清晰,最後學習的是服務端的實現,服務端在Redis可是重中之重,裡面基本上囊括了之前模組中涉及到的所有知識點,從redis的標頭檔就可以看出了,redis.h代碼量就已經破1000+行了,而且都還只是一些變數,宏定義的聲明,和一些方法原型的聲明。所以,今天的總結跟昨天一樣,先不做具體的實現學習,先從全域的角度思考,服務端的整體設計思路,這從標頭檔的聲明正好可以學習。

/* ----------------------- 聲明了一下所需的標頭檔,主要為各種結構體的操作檔案 -------------------- */#include "ae.h"      /* Event driven programming library  事件驅動庫*/#include "sds.h"     /* Dynamic safe strings  動態字串庫 */#include "dict.h"    /* Hash tables 雜湊字典 */#include "adlist.h"  /* Linked lists 普通雙向鏈表 */#include "zmalloc.h" /* total memory usage aware version of malloc/free 記憶體申請管理庫 */#include "anet.h"    /* Networking the easy way  網路操作庫 */#include "ziplist.h" /* Compact list data structure  壓縮列表 */#include "intset.h"  /* Compact integer set structure 整形set結構體 */#include "version.h" /* Version macro  版本號碼檔案*/#include "util.h"    /* Misc functions useful in many places 同樣方法類*/#include "latency.h" /* Latency monitor API 延時監視方法 */#include "sparkline.h" /* ASII graphs API  微線圖庫 *//* -----------------------------根據模組的不同,宏定義了不同的變數 ---------------- *//* 1.Error codes Redis錯誤碼*//* 2.Static server configuration  server中的一些靜態變數值*//* 3.Protocol and I/O related defines  協議和I/O相關變數的定義*//* 4.Hash table parameters 雜湊表的參數*//* 5.Command flags 命令列操作的flag定義*//* 6.Object types Object的類型,包括List,String,Hash等*//* 7.Objects encoding Object的編碼類別型*//* 8.Defines related to the dump file format RDB的儲存格式,14位,32位等*//* 9.AOF states  AOF檔案的狀態*//* 10.Client flags 用戶端的flag標示*//* 11.Client request types 用戶端的請求類型,INLINE和MULTIBULK*//* 12.Client classes for client limits 用戶端的類型*//* 13.Slave replication state replication狀態*//* 14.List related stuff 列表位置,head或tail*//* 15.Sort operations 排序操作類型,升序或是降序等等*//* 16.Log levels 記錄層級*//* 17.Anti-warning macro... 警告資訊*//* 18.Append only defines 追加操作變數*//* 19.Zip structure related defaults ziplist壓縮列表變數*//* 20.HyperLogLog defines HLLC的變數定義*//* 21.Sets operations codes 設定作業的作業碼*//* 22.Redis maxmemory strategies Redis記憶體操作策略*//* 23.Scripting *//* 24.Units 時間單位,微妙和毫秒*//* 25.SHUTDOWN flags *//* 26.Command call flags, see call() function *//* 27.Command propagation flags, see propagate() function *//* 28.Keyspace changes notification classes. 通知類型*//*----------------------------------------------------------------------------- * Data types 資料類型的相關定義 *----------------------------------------------------------------------------*/1.typedef struct redisObject /* Redis Object對象 */2.typedef struct redisDb3.typedef struct multiCmd4.typedef struct multiState5.typedef struct blockingState6.typedef struct readyList7.typedef struct redisClient  /* Redis用戶端結構體 */8.struct saveparam9.struct sharedObjectsStruct10.typedef struct zskiplistNode11.typedef struct zskiplist12.typedef struct zset13.typedef struct clientBufferLimitsConfig 14.typedef struct redisOp15.typedef struct redisOpArray16.struct redisServer /* Redis服務端結構體的定義 */17.struct redisCommand /* Redis服務端Command命令結構體的定義 *//*----------------------------------------------------------------------------- * Functions prototypes 方法原型 *----------------------------------------------------------------------------*//* 1.Utils 通用類的方法*//* 2.networking.c -- Networking and Client related operations 網路操作類方法*//* 3.List data type 列表操作方法*//* 4.MULTI/EXEC/WATCH... 命令執行方法*//* 5.Redis object implementation Redis Object對象方法*//* 6.Synchronous I/O with timeout I/O同步類方法*//* 7.Replication 主從複製方法*//* 8.Generic persistence functions 持久化載入的一些方法*//* 9.AOF persistence AOF記錄檔持久化方法*//* 10.Core functions 核心類方法*//* 11.Sorted sets data type 排序set集合方法*//* 12.Set data type set類型資料操作方法*//* 13.Hash data type 雜湊類型方法操作方法*//* 14.Pub / Sub 發布訂閱者法*//* 15.Keyspace events notification ketSpace事件通知方法*//* 16.Configuration 配置類方法*//* 17.db.c -- Keyspace access API db相關的方法*//* 18.Sentinel *//* 19.Scripting *//* 20.Git SHA1 *//* 21.Commands prototypes 命令原型方法*/
主要4個大模組

1.引用標頭檔聲明

2.宏定義變數定義

3.資料結構體的聲明

4.方法原型聲明

在這裡特別提出,在 代碼中遍地出現的RedisObject,RedisClient,RedisServer的結構定義,都是在這個檔案中定義的。

/* The actual Redis Object */#define REDIS_LRU_BITS 24#define REDIS_LRU_CLOCK_MAX ((1<<REDIS_LRU_BITS)-1) /* Max value of obj->lru */#define REDIS_LRU_CLOCK_RESOLUTION 1 /* LRU clock resolution in seconds */typedef struct redisObject {    unsigned type:4;    unsigned encoding:4;    unsigned lru:REDIS_LRU_BITS; /* lru time (relative to server.lruclock) */    int refcount;    void *ptr;} robj;
RedisClient,RedisServer的結構定義非常類似,裡麵包含了一堆的屬性,長長的一排下來。

Redis源碼分析(三十四)--- redis.h服務端的實現分析(1)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.