修复服务器端“Redis 正忙于运行脚本”的问题?

修复服务器端“Redis 正忙于运行脚本”的问题?

当这个问题之前被问到时(如何修复“Redis 正忙于运行脚本”错误),解决方案就是让客户端重试请求,直到成功为止。

我想知道,具体来说,是否可以在服务器端修复该问题。Redis 仅在脚本运行时回复“忙碌”,而不会回复任何其他命令。如果 Redis 正在执行脚本,您可以告诉 Redis 让客户端等待,直到它能够执行下一个命令,而不是向该请求返回 BUSY 错误吗?

答案1

Redis 是单线程的。

从命令执行的角度来看,Redis 基本上是一个单线程服务器(实际上,Redis 的现代版本使用线程来执行不同的事情)。它不是为从多个 CPU 核心中获益而设计的。如果需要,人们应该启动多个 Redis 实例以在多个核心上进行扩展。将单个 Redis 实例与多线程数据存储进行比较并不公平。

由于它是单线程的,所以如果作业排队,它将以上述错误结束。

你可以试试https://github.com/JohnSully/KeyDB

如果你对 hack 感兴趣,请参阅https://stackoverflow.com/questions/51929278/make-redis-client-wait-when-server-is-running-a-long-lua-script

相关内容