![修复服务器端“Redis 正忙于运行脚本”的问题?](https://linux22.com/image/750040/%E4%BF%AE%E5%A4%8D%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%AB%AF%E2%80%9CRedis%20%E6%AD%A3%E5%BF%99%E4%BA%8E%E8%BF%90%E8%A1%8C%E8%84%9A%E6%9C%AC%E2%80%9D%E7%9A%84%E9%97%AE%E9%A2%98%EF%BC%9F.png)
当这个问题之前被问到时(如何修复“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