redis-cli源码分析

redis-cli中有两个重要的结构体,一个是redisContext与一个是config

typedef struct redisContext {
    int err; /* Error flags, 0 when there is no error */
    char errstr[128]; /* String representation of error when applicable */
    int fd;//socket fd
    int flags;
    char *obuf; /* Write buffer */
    redisReader *reader; /* Protocol reader */
} redisContext;

redisContext跟redis-cli与redis server的tcp连接相关配置
config是redis-cli运行的配置文件,有初始化默认配置,也可以通过运行的时候传递参数修改配置

static struct config {
    aeEventLoop *el;
    const char *hostip;
    int hostport;
    const char *hostsocket;
    int numclients;
    int liveclients;
    int requests;
    int requests_issued;
    int requests_finished;
    int keysize;
    int datasize;
    int randomkeys;
    int randomkeys_keyspacelen;
    int keepalive;
    int pipeline;
    int showerrors;
    long long start;
    long long totlatency;
    long long *latency;
    const char *title;
    list *clients;
    int quiet;
    int csv;
    int loop;
    int idlemode;
    int dbnum;
    sds dbnumstr;
    char *tests;
    char *auth;
} config;

在main函数中,首先对config结构体中的配置进行初始化。
其中,config结构体中sds是redis自定义的字符串数据结构,定义为typedef char* sds
配置spectrum_palette和spectrum_palette size两个全局变量怀疑与cli命令行中的提示颜色有关
使用isatty函数判断是否连接的是终端,从而配置config.output为OUTPUT_RAW或者OUTPUT_STANDARD
使用parseOption(argc,argv)通过运行程序携带参数对config进行进一步配置
config配置完后开始根据配置配模式

        1. latency mode
        2. latency distribution mode
        3. slave mode
        4. get RDB mode
        5. Pipe mode
        6. stat mode
        7. scan mode
        8. LRU mode
        9. Intrinsic latency mode

如果没有任何附加命令,则运行默认的交互模式(interactive mode)
/* Ignore SIGPIPE in interactive mode to force a reconnect */
signal(SIGPIPE, SIG_IGN);//忽略sigpipe,如果尝试连接两次已经关闭的socket会导致sigpipe,告诉进程这个连接已经断开了,不要再写了,一般客户端默认退出,但是此处忽略SIGPIPE信号
/* Note that in repl mode we don’t abort on connection error.
* A new attempt will be performed for every command send. */
cliConnect(0);
repl();
使用cliConnect(0)连接redis server服务器
cliConnect(0)中&

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值