Как скрипты Lua блокируют весь сервер Redis? [дубликат]
Допустим, у меня запущен экземпляр Redis, и к нему подключены два клиента A и B. Я выполняю LUA-скрипт только для чтения из одного из них, а из другого - хэш-операцию только для чтения, используя шаблон Redis в Java. Поскольку все операции в Redis блокируются, я предполагаю, что если сценарий LUA запускается первым, другой клиент должен дождаться завершения операции сценария Lua. Точно так же, если операция хеширования выполняется первой, операция сценария Lua должна дождаться завершения операции хеширования. Это верное заявление? как Redis обрабатывает вызовы из нескольких источников, если он однопоточный?
Ответы
В Redis есть внутренний цикл Even Loop, который каждый раз запускает одно событие в основном потоке, подробности см.
- https://redis.io/topics/internals-rediseventlib
- http://nosqlgeek.blogspot.com/2019/10/so-what-exactly-is-event-loop.html