io.lettuce.core.protocol.AsyncCommand 命令
io.lettuce.core.FutureSyncInvocationHandler 执行具体command命令的地方
io.lettuce.core.protocol.CommandHandler 向redis服务器发送指令/从redis服务器那儿接收指令
lettuce客户端通过io.lettuce.core.protocol.CommandHandler向redis服务器发送指令,并接收redis服务器返回的消息
底层是通过Netty和redis进行通信
io.lettuce.core.protocol.CommandHandler就是一个channelHandler,负责发送\接收消息,CommandHandler维护了一个stack(存放AsyncCommand的队列)。
当CommandHandler往redis服务器发送一个指令时会同时往stack入栈这个指令(AsyncCommand),当CommandHandler接收到redis服务器的消息时从stack出栈一个AsyncCommand,
根据接收到的消息内容设置AsyncCommand命令的结果。
io.lettuce.core.protocol.AsyncCommand是一个CompletableFuture,当应用向redis发送命令时,会将命令封装成AsyncCommand,然后等待执行结果,这个结果就是等待CommandHandler
在接收redis消息时解析内容并将结果返回给AsyncCommand。
发送指令
=====io.lettuce.core.FutureSyncInvocationHandler
@Override
protected Object handleInvocation(Object proxy, Method method, Object[] args) throws Throwable {
try {
Method targetMethod = this.translator.get(method);
Object result = targetMethod.invoke(asyncApi, args);
if (result instanceof RedisFuture<?>) {
RedisFuture<?> command = (RedisFuture<?>) result;