1

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

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

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

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

4

1 回答 1

2

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

  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 。这种情况发生在第一个 beta 版本已经可用的生菜 5.0 上。

高温下,

标记

于 2017-02-06T13:19:29.100 回答