请求在Redis中合并

时间:2017-01-27 02:17:01

标签: redis request coalescing

这可能是基本问题,但谷歌没有返回满意的结果。

如果我使用Redis作为缓存并向Redis发送大量相同的请求,它是否会将其合并为一个请求,并在缓存未命中时仅向服务器转发一个请求?

2 个答案:

答案 0 :(得分:0)

Redis只是一个商店:你向它添加东西并再次检索它们。它没有意识到你正在使用它(缓存)或知道如何将未命中转发给其他后端,这将取决于处理请求并使用Redis缓存的应用程序。

答案 1 :(得分:0)

不,recuasse这将需要大量代码来支持它的两端,并且没有服务器,HTTP或Redis构建它。来自HTTP服务器的每个请求都是它自己的连接,需要单独响应。在HTTP或Redis服务器的当前体系结构中,无法在一个连接上接收多个请求,并在另一个连接上进行回复,同时消除其他请求路径。

此外,考虑到Redis的速度,确定哪些查询在请求和内容中都相同的开销很可能完全否定这种方案的任何可能的好处,并且可能会更多地延长响应时间而不是对每个人的简单回应会聚集在一起。 Redis无法知道客户端A对于密钥foo的请求可以被客户端B忽略为foo。如果一个请求被阻止而另一个请求没有阻止怎么办?如果两个客户端使用相同的IP但完全不同的进程会怎么样?再一次,Redis无法知道。

在你的缓存未命中的例子中,Redis必须以某种方式回应客户端,并说“我什么都没有给你”正是要走的路。请记住,与Redis服务器通信的最大部分开销是TCP连接,应该很明显,因为您希望保持连接打开以分摊多个请求,因此您仍然必须回复连接在请求中做出,并且无法知道连接B上的请求A可以被视为与连接D上的请求Z相同。

这就是为什么它需要在管道的两端上重写基本通信协议和架构。它听起来非常像是过早优化而没有数据来支持其背后的推理。 Redis每秒能够处理超过一百万个请求,充其量是可疑的,双方提供示例的所有额外复杂性和计算都可以改善这一点。