<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ? ? ?上次剛剛分析過了客戶端的結構體分析,思路比較簡答,清晰,最后學習的是服務端的實現,服務端在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 redisDb 3.typedef struct multiCmd 4.typedef struct multiState 5.typedef struct blockingState 6.typedef struct readyList 7.typedef struct redisClient /* Redis客戶端結構體 */ 8.struct saveparam 9.struct sharedObjectsStruct 10.typedef struct zskiplistNode 11.typedef struct zskiplist 12.typedef struct zset 13.typedef struct clientBufferLimitsConfig 14.typedef struct redisOp 15.typedef struct redisOpArray 16.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的結構定義非常類似,里面包含了一堆的屬性,長長的一排下來。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看