• Redis源码分析(三十二)--- redis-cli.c客户端命令行接口的实现(1)


             分析了将近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)
  • 相关阅读:
    Python面向对象
    Python
    05、Win7上openSSH的安装与配置
    关于C++中的类型转换
    正确地使用智能指针
    为多态基类声明多态析构函数
    透视校正插值(Perspective-Correct Interpolation)
    保持const和non-const函数代码的一致
    第二章 信息的表示和处理
    《Linux内核分析》课程总结
  • 原文地址:https://www.cnblogs.com/bianqi/p/12184193.html
Copyright © 2020-2023  润新知