目录
1. 目标
默认情况,Lettuce 对 所有非阻塞和非事务型操作 共享 同一个线程安全的本地连接。可配置LettucePool,为阻塞和事务操作,提供独占连接。通过源码与debug验证这些特性。
2. 理解lettuce连接
2.1. 连接模型
org.springframework.data.redis.connection.lettuce.LettuceConnection
// native连接提供者
private final LettuceConnectionProvider connectionProvider;
// 共享native连接
private final @Nullable StatefulConnection<byte[], byte[]> asyncSharedConn;
// 独占native连接
private @Nullable StatefulConnection<byte[], byte[]> asyncDedicatedConn;
// 当前lettuce连接是否在执行事务
private boolean isMulti = false;
// 当前lettuce连接是否在执行管道
private boolean isPipelined = false;
2.2. 连接工厂模型
org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory
private final LettuceClientConfiguration clientConfiguration;
// native连接提供者
private @Nullable LettuceConnectionProvider connectionProvider;
// 共享native连接
private boolean shareNativeConnection = true;
// 共享的连接
private @Nullable SharedConnection<byte[]> connection;
// 获取lettuce连接
org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory#getConnection
// 获取共享native连接
org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory#getOrCreateSharedConnection
2.3. 共享连接
org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory.SharedConnection