生菜:反应API的共享连接

时间:2017-02-06 11:22:54

标签: java redis amazon-elasticache lettuce

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

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

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

  3. 是否可以通过反应式API管道命令?我应该使用专用连接吗?

1 个答案:

答案 0 :(得分:2)

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

  1. 连接是线程安全的。
  2. Redis是单线程的。使用多个连接到一个主机显然没有意义,因为缺少Redis处理并行性而没有性能提升。
  3. 连接池会打开多个连接。虽然这可能对事务和阻塞命令隔离有意义,但池可能会导致性能下降。从一个接收来自多个应用程序服务器的连接的单个Redis服务器始终处于忙碌状态,并且接受和管理连接。单线程Redis本质也会影响接受和删除连接的过程。
  4. 关于流水线:在将后续命令发送到Redis之前,生菜不会等待命令完成,这意味着生菜默认使用流水线操作。防止流水线操作的唯一方法是在命令调用之外进行同步。

    每个命令都直接刷新到TCP连接。生菜可以在将命令刷新到连接之前使用批处理对命令进行分组。命令冲洗是一种手动操作,更多用于批量加载而不是用于反应性使用。

    还有两件事:

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

      标记