Redis:redission 源代码剖析1 连接建立

Redisson作为Redis官方推荐的Java客户端,利用Netty4.x进行网络通信并采用异步IO操作。文章深入剖析了其连接建立过程,包括ConnectionWatchdog过滤器实现的断线重连机制,以及使用ChannelGroup管理和编码解码器。RedisClient同时提供了同步和异步操作方式,尽管底层基于异步IO,但通过Future接口实现了同步操作的可能。
摘要由CSDN通过智能技术生成



redission作为redis  官方推荐的java客户端。 redission使用netty4.x作为网络层。 redission使用异步io方式操作。这与jedis 同步io操作方式完全不同。

但是redission也提供了同步操作方式。


在org.redisson.client 包下面,RedisClient 提供了对netty client端的包装。RedisClient 提供了同步或者异步连接redis服务器的方式,同时也提供了断线重连的机制。


ConnectionWatchdog   过滤器实现了断线重连的机制。


在redission中也提供了编码和解码器。


RedisClient 使用ChannelGroup来管理实际的socketchannel链接。


在netty中,实际输入输出操作都是通过Channel通道来进行。虽然,netty和apache  mina架构非常类似,这也加快了使用apache  mina的人迁移到netty上面。

但是在netty 中使用Channel 管理输入输出流。在apache  mina 是使用IoSession来管理输入输出流。


RedisClient 代码注释如下:

//redisclient  use  netty4.x
public class RedisClient {
    //构造客户端
    private final Bootstrap bootstrap;
    //连接地址
    private final InetSocketAddress addr;
    //管理客户端
    private final ChannelGroup channels = new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);

    private final long timeout;

    public RedisClient(String host, int port) {
        this(new NioEventLoopGroup(), NioSocketChannel.class, host, port, 60*1000);
    }

    public RedisClient(EventLoopGroup group, Class<? extends SocketChannel> socketChannelClass, String host, int port, int timeout) {
    	//连接端口
        addr = new InetSocketAddress(host, port);
        //构造客户端
        bootstrap = new Bootstrap().channel(socketChannelClass).group(group).remoteAddress(addr);
        //配置业务处理。这里实现了断线重连机制和编码解码功能
        bootstrap.handler(new ChannelInitializer<Channel>() {
            @Override
            protected void initChannel(Channel ch) throws Exception {
            	
                ch.pipeline().addFirst(new ConnectionWatchdog(bootstrap, channels),
                                        new CommandEncoder(),
                                        new CommandsListEncoder(),
                                        new CommandsQueue(),
                                        new CommandDecoder());
            }
        });
         //设置链接超时时间
        bootstrap.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, timeout);
        this.timeout = timeout;
    }

    public InetSocketAddress getAddr() {
        return addr;
    }

    long getTimeout() {
        return timeout;
    }

    public Bootstrap getBootstrap() {
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值