Middle
What is missing in the Redis scheme? How to solve the problem of binding order_id to courier_id?
sobes.tech AI
Answer from AI
In a Redis scheme, there is often a lack of an atomic mechanism to bind order_id to courier_id to prevent data desynchronization during parallel operations.
This problem can be solved using:
- Redis Transactions (MULTI/EXEC) for atomic updates of multiple keys.
- Lua scripts in Redis, which execute atomically and allow checking and establishing the link between order_id and courier_id in a single operation.
Example of a Lua script for binding:
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
This guarantees that the binding is created only if it does not already exist, preventing collisions.