Thuta Learning
ရှာဖွေရန်
Redis
IntermediateData & Databasesbeginner

Atomicity၊ Transactions နှင့် WATCH

ဒီခန်းပြီးရင် ဘာတတ်သွားမလဲ

  • Atomicity၊ Transactions နှင့် WATCH concept ကို နားလည်ရှင်းပြနိုင်ရန်
  • နမူနာ Redis command/code ကို ကိုယ်တိုင် run ပြီး output စစ်နိုင်ရန်
  • Tutorial Platform project နှင့် production scenario တွင် မှန်ကန်စွာအသုံးချနိုင်ရန်

နားလည်ထားရမယ့် အချက်

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 သို့ပြောင်းမယ်။

အတူတူ စမ်းရေးကြည့်မယ်

shell
WATCH seats:course:42
GET seats:course:42
MULTI
DECR seats:course:42
SADD course:42:enrolled user:7
EXEC
UNWATCH
You should see
Key မပြောင်းခဲ့လျှင် commands နှစ်ခု commit၊ ပြောင်းခဲ့လျှင် EXEC null reply ရမည်။

၅ မိနစ် စမ်းကြည့်

Wallet balance မဟုတ်သော inventory reservation ကို WATCH retry သုံးပြီး pseudocode ရေးပါ။

သတိလေးတစ်ချက်

EXEC success ကို PostgreSQL commit နဲ့ atomic တစ်ခုတည်းလို့ မယူဆပါနှင့်။ Distributed transaction/outbox design သီးခြားလိုပါတယ်။

Redis — TransactionsRedis

ဒီနေရာမှာ လူအများမှားတတ်တယ်

  • EXEC success ကို PostgreSQL commit နဲ့ atomic တစ်ခုတည်းလို့ မယူဆပါနှင့်။ Distributed transaction/outbox design သီးခြားလိုပါတယ်။
  • နမူနာ command ကို production Redis ပေါ် တိုက်ရိုက်မစမ်းဘဲ local/test instance နဲ့ recoverable data ပေါ်တွင် အရင်အတည်ပြုပါ။

လေ့ကျင့်ခန်း

Wallet balance မဟုတ်သော inventory reservation ကို WATCH retry သုံးပြီး pseudocode ရေးပါ။

You'll know it worked when: Key မပြောင်းခဲ့လျှင် commands နှစ်ခု commit၊ ပြောင်းခဲ့လျှင် EXEC null reply ရမည်။

Atomicity၊ Transactions နှင့် WATCH | Thuta Learning