生菜:用于响应式API的共享连接



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

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

  2. 我应该通过响应式API为事务使用池连接吗?

  3. 是否有可能通过反应式API传输命令?我应该使用专用连接吗?

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

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

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

每个命令都直接刷新到TCP连接。生菜可以使用批处理对命令进行分组,然后再将它们刷新到连接。命令冲洗是手动的,更多的是用于批量装载,而不是被动使用。

还有两件事:

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

HTH、

标记

最新更新