зачем нам команда eval в redis, если redis однопоточный? - PullRequest
0 голосов
/ 13 февраля 2020

Один из способов выполнения команд в REDIS - через скрипт EVAL.

Redis использует один и тот же интерпретатор Lua для запуска всех команд. Кроме того, Redis гарантирует, что сценарий выполняется в атомарном порядке c: никакой другой сценарий или команда Redis не будут выполняться во время выполнения сценария.

Поскольку redis является однопоточным, почему мы нужно EVAL, чтобы предложить атомарность? Я ожидаю, что это подразумевается одним запущенным потоком.

Я что-то упустил? Извиняюсь, если мой вопрос довольно прост, я новичок в redis

Ответы [ 2 ]

2 голосов
/ 13 февраля 2020

Каждая команда (путь к данным) в Redis действительно является атомом c. EVAL позволяет вам составить команду "atomi c" со сценарием, который может включать в себя множество команд Redis, не говоря уже о структурах управления и некоторых других утилитах, которые полезны для реализации серверной логики c. Для достижения подобной «атомарности» нескольких команд вы также можете использовать блоки MULTI/EXEC (т.е. транзакции ).

Без блока EVAL или MULTI/EXEC, Ваши команды будут выполняться одна за другой, но команды других клиентов могут чередоваться между ними. Использование сценария или транзакции устраняет это.

0 голосов
/ 13 февраля 2020

Redis использует один поток для выполнения команд от разных клиентов. Поэтому, если вы хотите, чтобы группа команд от одного клиента выполнялась последовательно, вам нужен способ, чтобы заставить Redis сделать это. Вот для чего EVAL. Без этого Redis может чередовать выполнение команд других клиентов с вашим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...