Bài 3 — Distributed Lock: Khi backend chạy nhiều instance
Khi hệ thống có nhiều instance:
- Cron job (schedule job) có thể chạy trùng
- Đơn hàng có thể bị xử lý hai lần
- Race condition xuất hiện

→ Redis thường được dùng để giải quyết bằng distributed locking.
Dùng lệnh:
SET key value NX PX 30000
→ Ý nghĩa:
NX: chỉ set nếu chưa tồn tại
PX: tự động hết hạn sau 30 giây
Trong Java
Redisson:
- RLock
- tryLock() auto unlock với release time
Ví dụ thực tế:
- Lock xử lý đơn hàng →Tránh double charge khi 2 request cùng đến.
- Lock batch job/schedule job →Chỉ cho phép 1 instance chạy cron job.
- Idempotent API →Đảm bảo 1 transaction ID chỉ xử lý một lần.
* Lưu ý quan trọng
- Luôn set expire time
- Không giữ lock quá lâu
- Redis lock không thay thế DB transaction
- Vẫn cần unique constraint ở database
==> Chú ý: Redis lock là lớp bảo vệ ở application level, không phải ACID transaction.
Tham khảo:
1. Distributed Locks with Redis - Redis IO
2. Distributed Locking Mechanism using Redis - Medium
3. Top 10 Redis Use Cases - Algomaster Newsletter
All Rights Reserved