分析SpringDataRedis集成lettuce-core数据连接获取的源码分析
依赖环境
Group ID: org.springframework.data Artifact ID: spring-data-redis Version: 3.5.0
Group ID: io.lettuce Artifact ID: lettuce-core Version: 6.5.5.RELEASE
redis自动配置类
org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration
org.springframework.boot.autoconfigure.data.redis.LettuceConnectionConfiguration
本文只分析SpringDataRedis和lettuce-core有关的源码。
LettuceConnectionFactory
org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory#createConnectionProvider

对是否是池化的配置对象进行了判断,池化对象是需要使用引入commons-pool2依赖库。
是lettuce-core库的可选库commons-pool2。
org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory#getConnection


org.springframework.data.redis.connection.lettuce.LettuceConnection#LettuceConnection(io.lettuce.core.api.StatefulRedisConnection<byte[],byte[]>, org.springframework.data.redis.connection.lettuce.LettuceConnectionProvider, long, int)
org.springframework.data.redis.connection.lettuce.LettuceConnection#execute(java.lang.String, io.lettuce.core.output.CommandOutput, byte[]...)


getAsyncConnection方法是判断返回哪个连接来进行执行redis指令。
单个LettuceConnection(非线程安全的)内部有2个连接,一个是由LettuceConnectionFactory创建并缓存下来的共享连接(asyncSharedConnection属性),
另一个是由LettuceConnection内部创建并维护的专有连接(asyncDedicatedConnection属性)。
总结:换句话说你不需要改变默认org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory#shareNativeConnection属性,
因为SpringDataRedis内部就已经对其做了处理,只有当是队列或者流水线时,会创建并缓存LettuceConnection对象内部的专用连接对象。
此org.springframework.data.redis.connection.lettuce.LettuceConnection#getConnection()方法会在开启事务的时候,会返回专用连接。
此org.springframework.data.redis.connection.lettuce.LettuceConnection#getAsyncConnection方法会在开启事务和流水线时或者共享连接为NULL时,会返回专用连接。
上边的图片就是大致的源码切入点。完毕。
SpringDataRedis的Repository用法,不支持事务,但是底层也是使用了org.springframework.data.keyvalue.core.KeyValueTemplate,
最为关键的就是KeyValueAdapter adapter;属性了。

浙公网安备 33010602011771号