နားလည်ထားရမယ့် အချက်
Redis command တစ်ခုချင်း atomic ဖြစ်ပါတယ်။ `MULTI` နောက် commands များ queue လုပ်ပြီး `EXEC` တွင်အစဉ်လိုက် run သော်လည်း SQL transaction လို runtime error rollback မရှိပါ။ `WATCH` က key ပြောင်းလျှင် EXEC ကို abort လုပ်ပေးသော optimistic lock ဖြစ်ပြီး client က bounded retry လုပ်ရပါတယ်။
လက်တွေ့ scenario နဲ့ ချိတ်ကြည့်မယ်
Course seat reserve flow တွင် `WATCH seats:course:42`၊ value ဖတ်၊ capacity စစ်၊ `MULTI` + decrement + enrollment marker + `EXEC` လုပ်မယ်။ High contention ဖြစ်လျှင် round trips နည်းပြီး atomic ဖြစ်သော Lua script သို့ပြောင်းမယ်။
အတူတူ စမ်းရေးကြည့်မယ်
WATCH seats:course:42
GET seats:course:42
MULTI
DECR seats:course:42
SADD course:42:enrolled user:7
EXEC
UNWATCHKey မပြောင်းခဲ့လျှင် commands နှစ်ခု commit၊ ပြောင်းခဲ့လျှင် EXEC null reply ရမည်။၅ မိနစ် စမ်းကြည့်
Wallet balance မဟုတ်သော inventory reservation ကို WATCH retry သုံးပြီး pseudocode ရေးပါ။
သတိလေးတစ်ချက်
EXEC success ကို PostgreSQL commit နဲ့ atomic တစ်ခုတည်းလို့ မယူဆပါနှင့်။ Distributed transaction/outbox design သီးခြားလိုပါတယ်။
Redis — Transactions — Redis