Я пишу некоторую логику для Redis внутри Lua и почти каждый из моих сценариев есть что-то общее, было бы очень удобно, чтобы выйти из этого к общей функции, ноRedis, как уменьшить Lua копипаст
- Redis не может использовать Lua требуют ничего о
- официально вы не можете вызвать другую функцию Redis (см https://stackoverflow.com/a/22599862/1812225)
Например, у меня есть этот фрагмент буквально везде
local prefix = "/" .. type
if typeId then
prefix = prefix .. "(" .. typeId .. ")"
end
Я думал о какой-то пост-обработки перед подачей сценариев для Redis, но это кажется более-убить ...
Что является лучшей практики для решения/уменьшить эту проблему?
Обновлено:
local registryKey = "/counters/set-" .. type
local updatedKey = "/counters/updated/set-" .. type
if typeId then
redis.call("SAdd", updatedKey, name .. ":" .. typeId)
redis.call("SAdd", registryKey, name .. ":" .. typeId)
else
redis.call("SAdd", updatedKey, name)
redis.call("SAdd", registryKey, name)
end
еще один пример кода, и он не может быть тривиальным переехал на стороне клиента, как он вызывает Redis команды, и работает как часть сделки
Спасибо!
Предположим на мгновение, что этот общий общий фрагмент можно использовать совместно - вы действительно хотите его использовать? Иными словами, здесь есть мирская задача, которую нужно делать много раз ...Нажатие его в сценарий Lua означает, что вы будете использовать ресурсы из своей базы данных Redis, чтобы выполнить что-то, что можно было бы сделать в другом месте. Я не говорю, что это неправильно, но, как правило, я стараюсь придерживаться такой логики вне базы данных, когда это возможно. –
Что касается этого одного фрагмента, вы, вероятно, правы @ itamar-haber. Но у меня есть другой случай, когда мне нужно делать что-то с условной логикой, которая снова и снова запускает команды redis ... Его нельзя легко переместить на сторону клиента. – let4be
С другой стороны, я, вероятно, должен просто создать другой скрипт с повторяющимися шагами и использовать их как внутри «MULTI», т. е. «MULTI EVALSHA EVALSHA ...» Это просто кажется не идеальным с точки зрения пропускной способности, но не должно быть большой проблемой. – let4be