您的位置:主页 > 新知 >

Redis客户端Lettuce源码「二」Lettuce是如何基于Netty建立连接的

2020-06-06     来源:千亿棋牌游戏         内容标签:Redis,客户端,Lettuce,源码,「,二,」,是,如

导读:lettuce-core版本:5.1.7.RELEASE先看一下Lettuce的基本使用方法,使用Lettuce大概分为如下几步:基于Redis连接信息创建RedisClient基于RedisClient创建StatefulRedisCon

lettuce-core版本:5.1.7.RELEASE

先看一下Lettuce的基本使用方法,使用Lettuce大概分为如下几步:

基于Redis连接信息创建RedisClient基于RedisClient创建StatefulRedisConnection从Connection中获取Command,基于Command执行Redis命令操作。

/**

*@authorxiaobing

*@date2019/12/20

*/

publicclassLettuceSimpleUse{

privatevoidtestLettucethrowsExecutionException,InterruptedException{

//构建RedisClient对象,RedisClient包含了Redis的基本配置信息,可以基于RedisClient创建RedisConnection

RedisClientclient=RedisClient.create;

//创建一个线程安全的StatefulRedisConnection,可以多线程并发对该connection操作,底层只有一个物理连接.

StatefulRedisConnectionconnection=client.connect;

//获取SyncCommand。Lettuce支持SyncCommand、AsyncCommands、ActiveCommand三种command

RedisStringCommandssync=connection.sync;

Stringvalue=sync.get;

System.out.println;

//获取SyncCommand。Lettuce支持SyncCommand、AsyncCommands、ActiveCommand三种command

RedisAsyncCommandsasync=connection.async;

RedisFuturegetFuture=async.get;

value=getFuture.get;

System.out.println;

}

publicstaticvoidmainthrowsExecutionException,InterruptedException{

newLettuceSimpleUse.testLettuce;

}

}

先看一张建立连接的时序图,有一个直观的印象。

RedisClient

一个可扩展、线程安全的RedisClient,支持sync、async、reactor执行模式。RedisClient.create只是传入了一些配置信息,此时并没有创建连接。

//使用默认的ClientResource

publicstaticRedisClientcreate{

LettuceAssert.notEmpty;

returnnewRedisClient);

}

//ClientResources中包含了一些配置和线程池信息,是一个比较重的资源,多个RedisClient可以共享同一个ClientResource

protectedRedisClient{

super;

assertNotNull;

this.redisURI=redisURI;

setDefaultTimeout);

}

RedisClient.connnect

可以看到connect方法有一些重载方法,默认的是用UTF8String对key和value序列化,通过传入RedisCodec支持自定义的对Key和Value的序列化方式。

publicStatefulRedisConnectionconnect{

returnconnect);

}

publicStatefulRedisConnectionconnect{

checkForRedisURI;

//connectStandaloneAsync是异步创建connection,返回的是Future对象,通过getConnection转为同步操作

returngetConnection);

}

//异步转同步操作

protectedTgetConnection{

try{

returnconnectionFuture.get;

}catch{

Thread.currentThread.interrupt;

throwRedisConnectionException.create,e);

}catch{

if{

throwRedisConnectionException.create,e.getCause);

}

throwRedisConnectionException.create,e);

}

}

RedisClient.connectStandaloneAsync

privateConnectionFutureconnectStandaloneAsync{

assertNotNull;

checkValidRedisURI;

文章链接地址:/xinzhi/20200606/5857.html

上一篇:新能源汽车跌幅超过四成,但专家指出,电池成本大幅下降,效能提升,未来可期
下一篇:你要的全都有!7FRESH七鲜生活为你提供三全式服务

新知相关文章