zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    SQLMAP注入教程-11种常见SQLMAP使用方法详解
    VS2012/2013/2015/Visual Studio 2017 关闭单击文件进行预览的功能
    解决 IIS 反向代理ARR URLREWRITE 设置后,不能跨域跳转 return Redirect 问题
    Spring Data JPA one to one 共享主键关联
    JHipster 问题集中
    Spring Data JPA 定义超类
    Spring Data JPA查询关联数据
    maven命名
    maven仓库
    Jackson读取列表
  • 原文地址:https://www.cnblogs.com/bianqi/p/12184193.html
Copyright © 2011-2022 走看看