Bỏ qua nội dung

Redis

Vai trò Redis trong V-Nexus

Redis là state store tạm thời + rate-limit backbone cho backend V-Nexus. Đặt cùng Minipc Server với Postgres và App (single-node Lettuce, không cluster) — footprint nhỏ vì mọi key đều có TTL.

Nguyên tắc bất biến

  • Mọi key đều có TTL — không có key vĩnh viễn. Redis không phải DB.
  • Source of truth vẫn là Postgres — Redis chỉ là cache/counter/lock. Cache miss luôn rebuild được từ DB.
  • Fail-open trên Redis outage — khi Redis chết, request vẫn đi (không fail business logic). Trade-off: rate-limit + cache hit-rate suy giảm tạm thời.
  • Key prefix theo domain (otp:*, fav:*, bucket:*, …) — dễ scan, dễ TTL chính sách.
  • Không lưu PII raw — OTP lưu BCrypt hash, phone đã được normalize E.164.

Kiến trúc

flowchart LR
    subgraph App[BE App]
        OTP[OtpServiceImpl]
        RL[RateLimitGuard]
        FAV[FavoriteCacheService]
        FUT[Future use cases]
    end

    subgraph Redis[Redis - Minipc Server local]
        K1[otp:*]
        K2[bucket:*]
        K3[fav:count:*]
        K4[Future keys]
    end

    OTP -->|StringRedisTemplate| K1
    RL -->|Bucket4j Lettuce| K2
    FAV -->|StringRedisTemplate| K3
    FUT -->|TBD| K4

    Redis -. fail-open .-> App

Thư viện sử dụng

CấpThư việnMục đích
DriverLettuce (qua Spring LettuceConnectionFactory)Async, single client reuse cho cả app
API thườngStringRedisTemplateOTP, favorites — operations đơn giản
Rate limitBucket4j + Bucket4jLettuceToken bucket distributed (CAS-based)
Caching@Cacheable (Spring Cache)Chưa dùng — kế hoạch dùng cho permissions/entitlements