分析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;属性了。

TIP:如果有与者有关的问题,欢迎在下方评论补充和提问,有关的内容会在文章处补充。

posted @ 2025-05-31 19:07  星小梦  阅读(74)  评论(0)    收藏  举报