Как я могу получить работникам Redis доступ к этим наборам неблокирующим способом для вставок?

Я хочу настроить следующий рабочий процесс:

Запрос устанавливает ниже, который действует как замок

SET locks lock_value NX PX 5000

Если это возвращает 0, запрос останавливается. Если он возвращает 1, он делает

INCR lock_value
INCR global_count

Таким образом, у меня есть 1 набор, global_count, и я могу иметь много наборов lock_value, поскольку это переменная. Затем я снимаю блокировку с помощью этого скрипта LUA:

if redis.call("get",KEYS[1]) == ARGV[1] then
return redis.call("del",KEYS[1])
else
return 0
end

Я буду обрабатывать эти действия постоянно.

Однако каждые 5 минут я хочу просмотреть все существующие различные значения lock_values, которых существует большое число, и вставить каждое из значений lock_values ​​в базу данных. Это не будет так быстро, как обычные операции по повторению. Как мне сделать эту часть зацикливания отдельно от части блокировки / вставки данных / удаления блокировки. Это должно быть в отдельном процессе?

Я думаю, что я хочу два процесса или два сервера Redis. Один, чтобы установить блокировку, увеличить данные, сбросить блокировку снова и снова. Другой — периодически сканировать lock_values ​​и сбрасывать его в базу данных, не блокируя скрипт LUA. Для каждого значения lock_value не важно, если некоторые значения не полностью соответствуют первому циклу, если через 5 минут следующий цикл обнаруживает пропущенные приращения.

Это возможно?

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]