Bỏ qua, đến nội dung

@digiforce-nc/plugin-lock-adapter-redis

Plugin distributed lock qua Redis — đảm bảo chỉ một process xử lý tài nguyên tại một thời điểm trong môi trường multi-instance.

Plugin này làm gì?

Khi chạy nhiều instance (cluster, horizontal scaling), các tác vụ như migration, cron job, hoặc xử lý queue có thể bị chạy đồng thời trên nhiều instance. Plugin sử dụng Redis SET NX (Redlock algorithm) để cung cấp distributed locking — chỉ instance nào acquire được lock mới được thực thi.

Cơ chế hoạt động

Tính năng chính

#Tính năngMô tả
1Distributed lockKhoá phân tán qua Redis SET NX
2Auto-expire (TTL)Tự giải phóng lock sau TTL, tránh deadlock khi crash
3Retry with backoffTự retry với exponential backoff khi lock bị chiếm
4Drop-in adapterThay thế lock adapter mặc định (in-memory), zero code change
5Lock extensionGia hạn lock nếu task chạy lâu hơn TTL
6NamespacePrefix key tránh xung đột giữa các ứng dụng

Cấu hình

Tham sốMặc địnhMô tả
redis.urlredis://localhost:6379URL kết nối Redis
ttl30000Thời gian lock tối đa (ms)
retryCount3Số lần retry khi lock bị chiếm
retryDelay200Delay giữa các lần retry (ms)
prefixlock:Prefix cho key trong Redis

Kiến trúc nội bộ

Thành phầnVai trò
RedisLockAdapterImplement LockManager interface
acquireLấy lock bằng SET NX + TTL
releaseGiải phóng lock bằng DEL (với owner check)
extendGia hạn TTL cho lock đang giữ

Dependencies

PackageVai trò
@digiforce-nc/serverServer framework — LockManager interface
@digiforce-nc/databaseLock interface contract
ioredisRedis client

Lưu ý triển khai

  • Redis phải accessible từ tất cả instance trong cluster
  • TTL nên đủ dài cho task hoàn thành, đủ ngắn để recovery nhanh
  • Nếu Redis restart, tất cả lock bị mất — các task sẽ tự retry
  • Với Redis Cluster/Sentinel, cấu hình URL tương ứng

Mục lục chi tiết