【问题标题】:Lettuce: Shared connection for reactive APILettuce:反应式 API 的共享连接
【发布时间】:2017-06-23 07:44:09
【问题描述】:

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

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

  2. 我应该使用池连接通过反应式 API 进行事务处理吗?

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

【问题讨论】:

    标签: java redis amazon-elasticache lettuce


    【解决方案1】:

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

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

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

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

    还有两件事:

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

    HTH,

    标记

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-14
      相关资源
      最近更新 更多