Lettuce:反应式 API 的共享连接

Lettuce: Shared connection for reactive API

我正在将我当前的项目从 Jedis 移植到 Lettuce。

  1. 是否可以将共享连接用于响应式 API?只要我不调用阻塞和事务性操作,例如 BLPOP 和 MULTI/EXEC?

  2. 我是否应该通过反应式 API 使用池连接进行交易?

  3. 是否可以通过反应流水线命令 API?我应该为此使用专用连接吗?

在多个线程之间共享一个连接是预期用途。有多种原因:

  1. 连接是线程安全的。
  2. Redis 是 single-threaded。使用到一台主机的多个连接显然没有意义,因为由于缺乏 Redis 处理并行性,没有性能提升。
  3. 连接池打开多个连接。虽然这对于事务和阻塞命令隔离可能有意义,但池化可能会导致性能下降。从多个应用程序服务器接收连接的单个 Redis 服务器首先要忙于接受和管理连接。 single-threaded Redis 的特性也会影响接受和删除连接的过程。

关于流水线:lettuce 在向 Redis 发送后续命令之前不会等待命令完成,这意味着 lettuce 默认使用流水线。防止流水线化的唯一方法是在命令调用时进行外部同步。

每个命令都直接刷新到 TCP 连接。 Lettuce 可以在将命令刷新到连接之前使用批处理对命令进行分组。命令刷新是手动操作,更适合批量加载而不是被动使用。

还有两件事:

  1. wiki 应该更详细地回答您的问题:https://github.com/mp911de/lettuce/wiki
  2. Lettuce 从 RxJava 1 迁移到基于 Project Reactor 的 Reactive Streams API。这发生在 lettuce 5.0 上,它的第一个测试版已经可用。

HTH,

马克