首页 > 技术文章 > magent实现memcached集群的一个问题

junchu25 2017-01-23 15:59 原文

之前我们小组封装了一个memcached类库,里面有一个名为RemoveStartWith的方法可以根据起始字符串删除所有节点中负责键值规则的缓存项。它实现的原理就是通过stats命令获取每个节点的所有缓存键值然后逐一匹配。使用magent后这个方法就不起作用了,因为magent并不支持stats命令。查看了magent.c源代码:

} else if (ntokens >= 2 && (strcmp(tokens[COMMAND_TOKEN].value, "stats") == 0)) {
        /* END\r\n
         */
        char tmp[128];
        out_string(c, "memcached agent v" VERSION);
        for (i = 0; i < matrixcnt; i ++) {
            snprintf(tmp, 127, "matrix %d -> %s:%d, pool size %d", 
                    i+1, matrixs[i].ip, matrixs[i].port, matrixs[i].used);
            out_string(c, tmp);
        }
        out_string(c, "END");
        skip = 1;
    }

要让magent支持stats命令需要作出一定的修改,主要包括在conn结构中的flag结构新增一个stats相关命令、修改发送请求的do_transcation函数实现、修改处理请求的process_get_response函数实现。

推荐阅读