【发布时间】:2014-11-19 17:07:12
【问题描述】:
我想使用管道来减少我的程序和redis-server之间的交互次数。
我可以在管道中设置许多命令,但我找不到任何描述可以在管道中设置的最大命令数的文档。
有什么建议吗?提前致谢。
【问题讨论】:
我想使用管道来减少我的程序和redis-server之间的交互次数。
我可以在管道中设置许多命令,但我找不到任何描述可以在管道中设置的最大命令数的文档。
有什么建议吗?提前致谢。
【问题讨论】:
不确定是否有最大值,但我认为你不想达到它以防万一。
在大多数情况下,将管道大小限制为 100-1000 次操作可以获得最佳结果。但是,您可以进行一些基准研究,其中包括您发送的典型请求。 流水线请求通常很好,但请记住,响应会保存在 Redis 内存中,直到所有流水线请求都得到处理,并且您的客户端会等待所有请求的长回复。
您应该尝试找到并发连接、流水线请求和 Redis 内存的最佳点。
在您的管道的最后一个查询发送到 Redis 之前,您的客户端不会开始阅读回复。当管道太长时,它有可能阻塞东西。
您可以使用redis-benchmark 或memtier_benchmark。 Here's memtier_benchmark 上有更详细的描述和说明。
当您找到流水线请求的数量和连接数时,您应该在您的应用中使用您的 redis-py 客户端来实现它。
【讨论】:
get 和 setex)(尽管使用 PHP)。直到最近才出现问题,数量缓慢增加。但目前我们正在接收随机的true 结果,我现在将尝试看看分块是否会产生(大)差异,但据我所知,没有实际的强制限制。似乎传输在某些时候会导致问题。