请选择 进入手机版 | 继续访问电脑版

Redis中国用户组(CRUG)论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
热搜: 活动 交友 discuz
查看: 717|回复: 0

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

[复制链接]
  • TA的每日心情
    奋斗
    2017-6-13 10:19
  • 签到天数: 92 天

    [LV.6]常住居民II

    369

    主题

    474

    帖子

    3754

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    3754

    最佳新人活跃会员宣传达人突出贡献优秀版主荣誉管理论坛元老

    发表于 2016-4-14 10:39:54 | 显示全部楼层 |阅读模式

    分析了将近1个月的Redis源代码了,也到了最核心的,最贴近系统开始的地方了,我把他取名为main目录,里面就包括了2个重要的文件,redis-cli和redis文件,1个代表的是客户端的执行文件,1个代表的是服务端的文件,这2个也是整个系统最最核心的模块,所以我把他归结到main主程序模块了,主程序模块也是我学习Redis最后的一个模块,在这里一定能看到我之前看到的所有各个功能模块的痕迹。由于主模块中的代码量比较多,所以我选择了分批次的学习,所以今天我主要的是把里面的API方法给拉了出来,把redis-cli中的东西,做了个解剖。

           刚开始以为redis-cli.是redis-client的缩写,但其实他的意思:

    1. <span style="background-color: inherit; line-height: 26px;"><font face="Arial">/* Redis CLI (command line interface)  
    2. * 命令行接口  </font></span><span style="font-family: Consolas, 'Courier New', Courier, mono, serif; line-height: 18px; font-size: 9px; background-color: inherit;">  </span>
    复制代码

    所以说,他是直接响应操作redis下的黑窗口的命令的。在这个文件中,定义了redis的上下文,配置信息结构体和一堆的API,就大致这些了:
    1. /* redis上下文 */  
    2. static redisContext *context;  
    3. /* Redis配置结构体 */  
    4. static struct config  
    复制代码

    主要是后面的各种API,先不急着看方法,因为方法真的是太多了,首先我们学会分类:下面是我做的一个图;


    模块还是挺多的吧上面都是英文的表现形式,在后续的分析中,我会逐个模块的做学习,比如第一个Utility functions就是通用方法的意思啦,还有后面的什么什么方法等。下面在放出redis-cli中的所有API:

    1. /* Utility functions  通用方法 */  
    2. static long long ustime(void)  
    3. static long long mstime(void)  
    4. static void cliRefreshPrompt(void)  
    5. static sds cliVersion(void)  
    6. static void cliInitHelp(void)  
    7. static void cliOutputCommandHelp(struct commandHelp *help, int group)  
    8. static void cliOutputGenericHelp(void)  
    9. static void cliOutputHelp(int argc, char **argv)  
    10. static void completionCallback(const char *buf, linenoiseCompletions *lc)  
    11. static int cliAuth()  
    12. static int cliSelect()  
    13. static int cliConnect(int force)  
    14. static void cliPrintContextError(void)  
    15. static sds cliFormatReplyTTY(redisReply *r, char *prefix)  
    16. static sds cliFormatReplyRaw(redisReply *r)  
    17. static sds cliFormatReplyCSV(redisReply *r)  
    18. static int cliReadReply(int output_raw_strings)  
    19. static int cliSendCommand(int argc, char **argv, int repeat)  
    20. static redisReply *reconnectingInfo(void)  
    21.       
    22. /* User interface 用户接口*/  
    23. static int parseOptions(int argc, char **argv)  
    24. static sds readArgFromStdin(void)  
    25. static void usage(void)  
    26. static char **convertToSds(int count, char** args)  
    27. static void repl(void)  
    28. static int noninteractive(int argc, char **argv)  
    29.       
    30. /* Eval mode Eval模式*/  
    31. static int evalMode(int argc, char **argv)  
    32.       
    33. /* Latency and latency history modes 延时模式*/  
    34. static void latencyMode(void)  
    35.   
    36. /* Slave mode */  
    37. unsigned long long sendSync(int fd)  
    38. static void slaveMode(void)  
    39.   
    40. /* RDB transfer mode */  
    41. static void getRDB(void)  
    42.   
    43. /* Bulk import (pipe) mode */  
    44. static void pipeMode(void)  
    45.       
    46. /* Find big keys */  
    47. static redisReply *sendScan(unsigned long long *it)  
    48. static int getDbSize(void)  
    49. static int toIntType(char *key, char *type)  
    50. static void getKeyTypes(redisReply *keys, int *types)  
    51. static void getKeySizes(redisReply *keys, int *types, unsigned long long *sizes)  
    52. static void findBigKeys(void)  
    53.       
    54. /* Stats mode */  
    55. static char *getInfoField(char *info, char *field)  
    56. static long getLongInfoField(char *info, char *field)  
    57. void bytesToHuman(char *s, long long n)  
    58. static void statMode(void)  
    59.       
    60. /* Scan mode */  
    61. static void scanMode(void)  
    62.   
    63. /* Intrisic latency mode*/  
    64. unsigned long compute_something_fast(void)  
    65. static void intrinsicLatencyModeStop(int s)  
    66. static void intrinsicLatencyMode(void)  
    67.   
    68. /* Program main() */  
    69. int main(int argc, char **argv)  
    复制代码

    转自:http://blog.csdn.net/androidlushangderen/article/details/40857105

    上一篇:Redis源码分析(三十一)--- latency延迟分析处理




    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    阿里云
    阿里云

    Archiver|手机版|小黑屋|Redis中国用户组 ( 京ICP备15003959号

    GMT+8, 2017-7-28 14:51 , Processed in 0.121245 second(s), 33 queries .

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表