Я хочу настроить следующий рабочий процесс:
Запрос устанавливает ниже, который действует как замок
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 минут следующий цикл обнаруживает пропущенные приращения.
Это возможно?
Задача ещё не решена.
Других решений пока нет …