Sobes.tech
Назад к вопросам
Middle
5

Что не хватает в схеме с Redis? Как решить проблему привязки order_id к courier_id?

Компании, где спрашивали
Ecom

Ответ от нейросети

sobes.tech AI

В схеме с Redis часто не хватает механизма атомарной привязки order_id к courier_id, чтобы избежать рассинхронизации данных при параллельных операциях.

Проблему можно решить с помощью:

  • Использования Redis Transactions (MULTI/EXEC) для атомарного обновления нескольких ключей.
  • Применения Lua-скриптов в Redis, которые выполняются атомарно и позволяют проверить и установить связь между order_id и courier_id за одну операцию.

Пример Lua-скрипта для привязки:

local orderKey = KEYS[1]
local courierKey = KEYS[2]
local orderId = ARGV[1]
local courierId = ARGV[2]

if redis.call('exists', orderKey) == 0 then
  redis.call('set', orderKey, courierId)
  redis.call('set', courierKey, orderId)
  return 1
else
  return 0
end

Это гарантирует, что привязка создаётся только если её ещё нет, предотвращая коллизии.