Redis 命令處理流程

來源:互聯網
上載者:User


關鍵資料結構和方法1) struct redisCommand 
struct redisCommand {    char *name;    redisCommandProc *proc;    int arity;    char *sflags; /* Flags as string representation, one char per flag. */    int flags;    /* The actual flags, obtained from the 'sflags' field. */    /* Use a function to determine keys arguments in a command line. */    redisGetKeysProc *getkeys_proc;    /* What keys should be loaded in background when calling this command? */    int firstkey; /* The first argument that's a key (0 = no keys) */    int lastkey;  /* The last argument that's a key */    int keystep;  /* The step between first and last key */    long long microseconds, calls;};
對比某一個記錄看一下欄位的含義,也學習一下如何設計一個好的命令協議。{"set",setCommand,-3,"wm",0,noPreloadGetKeys,1,1,1,0,0},
 * w: write command (may modify the key space). * r: read command  (will never modify the key space). * m: may increase memory usage once called. Don't allow if out of memory. * a: admin command, like SAVE or SHUTDOWN. * p: Pub/Sub related command. * f: force replication of this command, regardless of server.dirty. * s: command not allowed in scripts. * R: random command. Command is not deterministic, that is, the same command *    with the same arguments, with the same key space, may have different *    results. For instance SPOP and RANDOMKEY are two random commands. * S: Sort command output array if called from script, so that the output *    is deterministic. * l: Allow command while loading the database. * t: Allow command while a slave has stale data but is not allowed to *    server this data. Normally no command is accepted in this condition *    but just a few. * M: Do not automatically propagate the command on MONITOR.
redisGetKeysProc以及後續的參數是處理參數列表,從命令列中解析出那些是key那些是value。假設我們希望返回服務端的易讀懂的時間,並且根據傳入的參數返回時間的格式。
void utimeCommand(redisClient *c) {char * fmt = c->argv[1]->ptr;char fmtResult[64];memset(fmtResult,0,64);struct timeval tv;gettimeofday(&tv,NULL);struct tm*tm;tm = localtime(&tv.tv_sec);if(tm!=NULL){strftime(fmtResult, sizeof fmtResult, fmt, tm);           }else{sprintf(fmtResult,"%s","error when retriving time");}addReplyBulkCString(c,fmtResult);}



相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.