Когда этот вопрос задавали раньше (Как исправить ошибку «Redis занят выполнением сценария»), решение состоит в том, чтобы заставить клиента повторять запросы до тех пор, пока он не завершится успешно.
Мне было интересно, можно ли вместо этого решить проблему на стороне сервера. Redis отвечает только «Занято», когда скрипт запущен, но не отвечает ни на какие другие команды. Если Redis находится в середине сценария, можете ли вы сказать Redis, чтобы он заставил клиента ждать, пока он сможет выполнить следующую команду, вместо того, чтобы возвращать ошибку BUSY в этот запрос?
Redis является однопоточным.
Redis - это, в основном, однопоточный сервер с точки зрения выполнения команд (на самом деле современные версии Redis используют потоки для разных целей). Он не предназначен для использования нескольких ядер ЦП. Люди должны запускать несколько экземпляров Redis для горизонтального масштабирования на нескольких ядрах, если это необходимо. Было бы нечестно сравнивать один экземпляр Redis с многопоточным хранилищем данных.
Поскольку он однопоточный, он будет завершен с указанными выше ошибками, если задания будут поставлены в очередь.
Можешь попробовать https://github.com/JohnSully/KeyDB
Если вас интересует взлом, пожалуйста, обратитесь https://stackoverflow.com/questions/51929278/make-redis-client-wait-when-server-is-running-a-long-lua-script