如何减少对 Redis 客户端的握手数量?

我正在编写一个要求非常快的响应时间的应用程序,我有一些查询需要对多个集合进行交集和并集。

一个示例为

((A union B) intersection C)

然而,当我使用 Java 客户端时,每个查询都需要多进行 1 个握手,从而增加响应时间。

我想知道是否有一种方法可以通过单个握手来完成它,Lua 脚本似乎是一个不错的选择,但我不确定它会在内部如何工作

点赞
用户4483094
用户4483094
  • Redis 的 lua 脚本是一种阻塞方法,它会一次性在 Redis 服务器中完成所有操作。
  • 因此,您可以避免您需要的网络往返。
  • 由于它是阻塞的,您应该始终注意何时使用它,如果所有这些联合和交集在生产环境中需要 5 秒钟,则对于等待执行的其他命令来说是阻塞的。其他命令可能无法执行并发出超时错误,这可能会导致问题更加严重。
  • 因此,您可以选择为每 50 个元素进行部分 lua 脚本调用(通过尝试不同的编号来确定最佳编号)。
  • 还要考虑使用多个元素的 sunion 和 sinter,而不仅仅是使用 2 个元素。即,

sunion set1 set2 set3... 而不是

sunionstore temp set1 set2

sunionstore temp temp set3 等等。

希望这有所帮助。

2016-08-26 16:05:25
用户5384363
用户5384363

你也可以使用pipeline来减少往返时间(RTT)。

通过pipeline,您可以一次将多个命令发送到Redis,并稍后读取所有回复。

2016-08-27 01:20:20