分析了将近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源码分析(三十二)--- redis-cli.c客户端命令行接口的实现(1)
原文地址:http://blog.csdn.net/androidlushangderen/article/details/40857105