? ? ? ?分析了將近1個月的Redis源代碼了,也到了最核心的,最貼近系統開始的地方了,我把他取名為main目錄,里面就包括了2個重要的文件,redis-cli和redis文件,1個代表的是客戶端的執行文件,1個代表的是服務端的文件,這2個也是整個系統最最核心的模塊,所以我把他歸結到main主程序模塊了,主程序模塊也是我學習Redis最后的一個模塊,在這里一定能看到我之前看到的所有各個功能模塊的痕跡。由于主模塊中的代碼量比較多,所以我選擇了分批次的學習,所以今天我主要的是把里面的API方法給拉了出來,把redis-cli中的東西,做了個解剖。
? ? ?剛開始以為redis-cli.是redis-client的縮寫,但其實他的意思:
~~~
/* Redis CLI (command line interface)
* 命令行接口
~~~
所以說,他是直接響應操作redis下的黑窗口的命令的。在這個文件中,定義了redis的上下文,配置信息結構體和一堆的API,就大致這些了:
~~~
/* redis上下文 */
static redisContext *context;
/* Redis配置結構體 */
static struct config
~~~
主要是后面的各種API,先不急著看方法,因為方法真的是太多了,首先我們學會分類:下面是我做的一個圖;

模塊還是挺多的吧上面都是英文的表現形式,在后續的分析中,我會逐個模塊的做學習,比如第一個Utility functions就是通用方法的意思啦,還有后面的什么什么方法等。下面在放出redis-cli中的所有API:
~~~
/* Utility functions 通用方法 */
static long long ustime(void)
static long long mstime(void)
static void cliRefreshPrompt(void)
static sds cliVersion(void)
static void cliInitHelp(void)
static void cliOutputCommandHelp(struct commandHelp *help, int group)
static void cliOutputGenericHelp(void)
static void cliOutputHelp(int argc, char **argv)
static void completionCallback(const char *buf, linenoiseCompletions *lc)
static int cliAuth()
static int cliSelect()
static int cliConnect(int force)
static void cliPrintContextError(void)
static sds cliFormatReplyTTY(redisReply *r, char *prefix)
static sds cliFormatReplyRaw(redisReply *r)
static sds cliFormatReplyCSV(redisReply *r)
static int cliReadReply(int output_raw_strings)
static int cliSendCommand(int argc, char **argv, int repeat)
static redisReply *reconnectingInfo(void)
/* User interface 用戶接口*/
static int parseOptions(int argc, char **argv)
static sds readArgFromStdin(void)
static void usage(void)
static char **convertToSds(int count, char**args)
static void repl(void)
static int noninteractive(int argc, char **argv)
/* Eval mode Eval模式*/
static int evalMode(int argc, char **argv)
/* Latency and latency history modes 延時模式*/
static void latencyMode(void)
/* Slave mode */
unsigned long long sendSync(int fd)
static void slaveMode(void)
/* RDB transfer mode */
static void getRDB(void)
/* Bulk import (pipe) mode */
static void pipeMode(void)
/* Find big keys */
static redisReply *sendScan(unsigned long long *it)
static int getDbSize(void)
static int toIntType(char *key, char *type)
static void getKeyTypes(redisReply *keys, int *types)
static void getKeySizes(redisReply *keys, int *types, unsigned long long *sizes)
static void findBigKeys(void)
/* Stats mode */
static char *getInfoField(char *info, char *field)
static long getLongInfoField(char *info, char *field)
void bytesToHuman(char *s, long long n)
static void statMode(void)
/* Scan mode */
static void scanMode(void)
/* Intrisic latency mode*/
unsigned long compute_something_fast(void)
static void intrinsicLatencyModeStop(int s)
static void intrinsicLatencyMode(void)
/* Program main() */
int main(int argc, char **argv)
~~~
- 前言
- (一)--Redis結構解析
- (二)--結構體分析(1)
- (三)---dict哈希結構
- (四)-- sds字符串
- (五)--- sparkline微線圖
- (六)--- ziplist壓縮列表
- (七)--- zipmap壓縮圖
- (八)--- t_hash哈希轉換
- (九)--- t_list,t_string的分析
- (十)--- testhelp.h小型測試框架和redis-check-aof.c日志檢測
- (十一)--- memtest內存檢測
- (十二)--- redis-check-dump本地數據庫檢測
- (十三)--- redis-benchmark性能測試
- (十四)--- rdb.c本地數據庫操作
- (十五)--- aof-append only file解析
- (十六)--- config配置文件
- (十七)--- multi事務操作
- (十八)--- db.c內存數據庫操作
- (十九)--- replication主從數據復制的實現
- (二十)--- ae事件驅動
- (二十一)--- anet網絡通信的封裝
- (二十二)--- networking網絡協議傳輸
- (二十三)--- CRC循環冗余算法和RAND隨機數算法
- (二十四)--- tool工具類(2)
- (二十五)--- zmalloc內存分配實現
- (二十六)--- slowLog和hyperloglog
- (二十七)--- rio系統I/O的封裝
- (二十八)--- object創建和釋放redisObject對象
- (二十九)--- bio后臺I/O服務的實現
- (三十)--- pubsub發布訂閱模式
- (三十一)--- latency延遲分析處理
- (三十二)--- redis-cli.c客戶端命令行接口的實現(1)
- (三十三)--- redis-cli.c客戶端命令行接口的實現(2)
- (三十四)--- redis.h服務端的實現分析(1)
- (三十五)--- redis.c服務端的實現分析(2)
- (三十六)--- Redis中的11大優秀設計