Redis:redission 源代码剖析2 编码解码过程

本文深入探讨了Redisson客户端如何利用Future模式实现异步网络通信,特别是在Netty和Redis协议的请求-响应模式下。核心流程关键在于Future接口,涉及的类包括ConnectionWatchdog(断线重连)、CommandEncoder和CommandDecoder(分别处理写入和读取)。在发送数据时,RedisConnection.send()方法通过ChannelFuture将请求与回应关联,并通过CommandsQueue进行处理,确保异步和同步读写的正确性。
摘要由CSDN通过智能技术生成



  在Netty和redission中都使用了java的public interface Future<V>  模式。

  理解redission的核心流程关键在于Future模式,关键代码在RedisClient 构造函数中。

  在RedisClient中初始化Channel的时候,用到了ConnectionWatchdog   CommandEncoder   CommandsListEncoder    CommandsQueue    CommandDecoder


  ConnectionWatchdog    功能是实现了断线重连的功能。在上一篇博客中已经提及。

  CommandEncoder      CommandsListEncoder     CommandsQueue     这三个类与写操作有关系。

  CommandDecoder    与 读取数据有关系。


 redis协议使用请求-回应模式, 而netty网络层使用了异步Nio模式,所以redission使用了Future 模式,使把请求和回应关联在一起。 每一个请求消息都关联了Promise .

 当消息收到时,找到关联的promise . redission提供了异步和同步读写模式。


既然,redis协议采用了请求-回应模式。所以,在redission中我们先来看看写操作。


RedisConnection.send(CommandData<T,R>)


  public <T, R> ChannelFuture send(CommandData<T, R> data) {
        return channel.writeAndFlush(data);
    }

当写数据时,会进入第一个CommandsQueue  ChannelOutboundHandler .进行处理。

在CommandsQueue  处理的数据类型为QueueCommand 接口。

代码如下:

public interface QueueCommand {
    List<CommandData<Object, Object>> getPubSubOperations();
}

CommandData 为
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值