如何在Spring Data Redis 2.0.X中将Lettuce异步连接与Spring Cache Abstraction(RedisCacheManager)结合使用

时间:2018-08-08 22:22:28

标签: spring-boot redis spring-data lettuce

我们最近将应用程序升级到了Spring Boot 2(2.0.3.RELEASE)。随同Spring Data Redis一起升级到了2.0.8.RELEASE。我们从使用Jedis切换到Lettuce,因为引导升级文档说这是默认设置。

我将生菜连接池定义为:

spring:
  redis:
    ssl: true
    lettuce:
      pool:
        max-active: 250
        max-idle: 250
        min-idle: 50
        max-wait: 2000ms
      shutdown-timeout: 100ms

我今天注意到在一台开发服务器上,在进行Redis读/写时,我们遇到了很多线程阻塞的情况。路径如下所示:

io.lettuce.core.internal.AbstractInvocationHandler:invoke:80
|
|__io.lettuce.core.FutureSyncInvocationHandler:handleInvocation:62
   |
   |__io.lettuce.core.LettuceFutures:awaitOrCancel:112 
      |
      |__io.lettuce.core.protocol.AsyncCommand:await:81
         |
         |__java.util.concurrent.locks.LockSupport:parkNanos:215

有时我们看到线程等待2秒,有时我们看到它等待19秒。

我开始研究Spring Redis的其他选项,例如管道。

https://github.com/lettuce-io/lettuce-core/wiki/Asynchronous-API

我遇到的问题是我找不到让LettuceConnection异步的方法。我看到流水线时调用了LettuceConnection.getAsyncConnection()。据我所知,流水线仅在使用RedisTemplate时可用。从Spring Data Redis 2开始,RedisCacheManager不再使用RedisTemplate。它使用RedisCacheConfiguration。

所以,我的问题是我们如何使用Spring Cache Abstraction(RedisCacheManager)进行异步Redis?

0 个答案:

没有答案