Redis 命令执行过程(下)
在上一篇文章中 《 Redis 命令执行过程(上)》中,我们首先了解 Redis 命令执行的整体流程,然后细致分析了从 Redis 启动到建立 socket 连接,再到读取 socket 数据到输入缓冲区,解析命令,执行命令等过程的原理和实现细节。接下来,我们来具体看一下 set 和 get 命令的实现细节和如何将命令结果通过输出缓冲区和 socket 发送给 Redis 客户端。 set 和 get 命令具体实现 前文讲到 processCommand 方法会从输入缓冲区中解析出对应的 redis Command,然后调用 call 方法执行解析出来的 redisCommand的 proc 方法。不同命令的的 proc 方法是不同的,比如说名为 set 的 redisCommand 的 proc 是 setCommand 方法,而 get 的则是 getCommand 方法。通过这种形式,实际上实现在Java 中特别常见的多态策略。 void call(client *c, int flags) { .... c->cmd->proc(c); .... } // redisCommand结构体 struct redisCommand { char *name; // 对应方法的函数范式 redisCommandProc *proc; .... // 其他定义 }; // 使用