acl-dev / acl

C/C++ server and network library, including coroutine,redis client,http/https/websocket,mqtt, mysql/postgresql/sqlite client with C/C++ for Linux, Android, iOS, MacOS, Windows, etc..
https://acl-dev.cn
GNU Lesser General Public License v3.0
2.84k stars 937 forks source link

[Question] Redis 的 Pipeline 模式已经完善了吗? #249

Closed zh1an closed 2 years ago

zh1an commented 2 years ago

你好,最新发布的 3.5.3-0 已经支持了 Redis 的 pipeline 吗?pipeline 比 tcp pool 快吗?您实现的该功能的原理有解释吗,如果有,请发个链接呗,我找了半天没找到。因为之前一直都是用的 TCP Pool (127.0.0.1),平均的读取时间是 200US,有时候会达到惊人的 5MS。对于单机模式太惊人了。

另外,在 Windows 上使用该库,是不是不支持 Unix 域?

zhengshuxin commented 2 years ago

在 doc 目录下的文档 redis_cluster.pptx 中有部分章节大体介绍了 pipeline 的设计原理及性能对比,您可以参考一下。至于你所遇到的5ms现象,我想大部分原因是建立连接方面的开销,另外,非 pipeline 方式下请尽量使用 redis_client_cluster 类做为通信类,内部会自动维护一组连接池从而提升通信的性能。当然,在 redis_client_pipeline 通信方式下性能会更好,并且可以以非常低的成本从 redis_client_cluster 切换至 redis_client_pipeline,使用 redis_client_pipeline 方式时,需要在一定的并发量下才可以突显性能优势;如果在请求端只几个并发(几个请求线程或协程),则可以参考 lib_acl_cpp/samples/redis/redis_pipeline2/redis_pipeline.cpp 示例,虽然其的并不如 lib_acp_cpp/samples/redis/redis_pipeline/redis_pipeline.cpp 易用和通用。

目前在Windows上使用该库还不能使用unix域套接字,因为该种方式在windows上并不通用。

此外,在lib_fiber/samples/redis_pipeline 下为协程方式使用 pipeline 的例子,在大并发下可以获得很高的性能。

zh1an commented 2 years ago

感谢回复。