KeyDB配置多线程后未生效,长查询仍阻塞普通读写请求?
KeyDB多线程并行查询能力实测
我正在测试KeyDB的性能提升效果,因为Redis的单线程查询模型确实存在瓶颈。据KeyDB官方文档介绍,其采用「真实多线程」实现数据库并行查询,不同于Redis仅支持IO多线程、查询执行仍为单线程的架构。
官方文档说明如下:
与Redis6、Elasticache不同,KeyDB在多个层面实现了多线程,包括将事件循环运行在多个线程上,网络IO、查询解析均可并发执行。
测试环境与步骤
- 首先在Ubuntu(WSL2)环境安装并启动KeyDB,启动时显示有2个活跃线程:
Thread 0 alive.Thread 1 alive. - 修改keydb.conf配置文件关闭持久化功能,核心配置
server-threads 2;也试过不使用配置文件,直接通过启动参数--server-threads 2指定,甚至设置为4线程,效果均无差异。 - 测试脚本逻辑:
- 先向一个hash结构中写入100万条简单JSON对象数据
- 编写控制台测试程序,开启两个线程:一个线程循环执行简单的
SET key1 1或GET key1 1请求;另一个线程等待1秒后执行HGETALL testhash长查询。
测试代码基于StackExchange.Redis库开发。
预期结果
长查询运行期间,简单SET/GET请求的响应时间应与平时一致,保持在0-1ms左右,不会因KeyDB阻塞出现延迟或限流。
实际结果
长查询运行期间,简单SET/GET请求出现了500-700ms的阻塞延迟,说明KeyDB实际仍仅使用单线程执行查询,和Redis的阻塞表现一致,未实现预期的多线程并行查询能力。
测试日志如下:
当输出「Starting long query」时开始执行HGETALL,之后立即出现简单SET请求延迟超过500ms的情况,而正常情况下这类请求耗时仅0-1ms。
使用ServiceStack Redis客户端的日志
10:50:55.336 GetValueFromHashAsync took 1 10:50:55.367 GetValueFromHashAsync took 1 10:50:55.397 GetValueFromHashAsync took 0 10:50:55.416 Starting long query 10:50:56.191 GetValueFromHashAsync took 766 <-- 被限流!我判断这是查询执行阶段导致的延迟,而非IO阶段延迟,此时长查询尚未返回结果 10:50:56.228 GetValueFromHashAsync took 0 10:50:56.261 GetValueFromHashAsync took 1 .... .... 10:51:00.592 GetValueFromHashAsync took 1 10:51:00.620 GetValueFromHashAsync took 1 10:51:00.651 GetValueFromHashAsync took 1 10:51:00.663 Long query done in 5244 <-- 长查询至此返回完成,总耗时约5秒,其中短请求被阻塞时长约0.7秒
我也测试过将短请求替换为hash读取操作,阻塞现象相同。
使用StackExchange.Redis客户端的日志
11:27:12.084 HashGetAsync took 0 11:27:12.115 HashGetAsync took 0 11:27:12.146 HashGetAsync took 0 11:27:12.177 HashGetAsync took 1 11:27:12.183 Starting long query 11:27:14.877 Long query done in 2692 11:27:14.893 HashGetAsync took 2686 <-- 被限流!本次短请求被阻塞的时长等于长查询的总耗时(查询+IO) 11:27:14.929 HashGetAsync took 0 11:27:14.960 HashGetAsync took 0 11:27:14.992 HashGetAsync took 0 11:27:15.023 HashGetAsync took 0 11:27:15.053 HashGetAsync took 0
结论
无论使用哪种客户端库,即使配置了2个甚至4个线程,KeyDB在长查询运行期间仍会阻塞其他请求,未实现官方宣称的并行查询能力。暂不深究StackExchange和ServiceStack客户端表现差异的原因,核心问题是KeyDB多线程未生效。
内容的提问来源于stack exchange,提问作者Ted
相关产品推荐
相关产品推荐

