Taryana
Sub-Millisecond HashHigh Performance Routing
TESTER READY • LIVE ENGINE

Redis Entitlements Cache Layer

Sub-Millisecond Authorization Hash & Invalidation Strategy

Caching status langganan dan hak akses properti di memory Redis untuk validasi izin super cepat (<1ms) pada request STB berfrekuensi tinggi.

Diagram Alur Data & Arsitektur Sistem

Visual Interaktif

Diagram Arsitektur Cache-Aside Redis & Fallback MongoDB

Lookup hak akses sub-milidetik untuk ribuan perangkat STB aktif

device
Thousands of STBs

STB Device

Heartbeat & Channel Req

Heartbeat
gateway
Reverse Proxy

API Gateway

Fast Route Dispatch

Check features
cache
Sub-ms Hit

Redis Memory Hash

SMEMBERS Lookup (<1ms)

Miss -> Read doc
db
Cache Miss

MongoDB Master

Fallback Document Read

Contract update -> DEL key
service
Instant Sync

Invalidation Bus

Contract Expire Evict

Problem & Latar Belakang Kebutuhan

Ketika ribuan perangkat STB di berbagai hotel menyala secara bersamaan pada jam sibuk, melakukan kueri status kontrak ke MongoDB pada setiap heartbeat akan menimbulkan bottleneck database yang tidak perlu.

Implementasi Rekayasa Backend NestJS

Entitlements dan status kontrak properti di-cache di Redis menggunakan struktur Hash (HSET property:HTL-GRAND-01:entitlements). Validasi otorisasi selesai dalam waktu di bawah 1 milidetik. Cache di-invalidasi secara instan saat Admin memperbarui status kontrak di portal IPTV.

Aspek Model Database MongoDB

Pola Cache-Aside: kueri dicek pertama kali ke Redis. Jika cache miss, sistem membaca dokumen Property di MongoDB, lalu me-warm-up kembali key Redis dengan TTL terkonfigurasi.

Keamanan, Idempotensi & Kepatuhan SLA

Status kontrak SUSPENDED atau EXPIRED langsung meng-evict cache Redis sehingga siaran TV dapat dihentikan seketika tanpa jeda sinkronisasi.

Redis Entitlement Service (Cache-Aside)NestJS (TypeScript)
// Redis Entitlement Lookup (Cache-Aside Pattern)
async getPropertyEntitlements(propertyCode: string): Promise<string[]> {
  const cacheKey = `property:${propertyCode}:features`;

  // 1. Cek memory Redis (< 1ms)
  const cached = await this.redis.smembers(cacheKey);
  if (cached && cached.length > 0) {
    return cached;
  }

  // 2. Fallback baca MongoDB jika cache miss
  const property = await this.propertyModel.findOne({ code: propertyCode });
  if (!property || property.subscription.status !== 'ACTIVE') {
    return [];
  }

  // 3. Warm-up Redis cache dengan TTL 3600 detik
  await this.redis.sadd(cacheKey, ...property.subscription.features);
  await this.redis.expire(cacheKey, 3600);

  return property.subscription.features;
}

Live Simulator & Execution Sandbox

Interactive State Tester
Latensi Cache Redis:0.8 ms (Cache Hit)
Direct Query MongoDB: ~42.5 ms50x Lebih Cepat
Key Redis Hash:property:HTL-GRAND-01:featuresTTL: 3600 detik dengan invalidasi seketika saat perpanjangan kontrak.
Execution Telemetry Console
HTTP 201 Created
POST/api/v1/properties/contracts
> Guard Evaluation Trace:

RolesGuard verified caller is 'admin'. Idempotency Key verified in Redis. MongoDB document updated.

> Database & State Result:

Contract for 'Grand Horizon Hotel & Resort' persisted into Property document with 1-Year validity.

Audit Trail MongoDB (2 events)Auto-Appended
[10:14:02]ADMIN(Rian (Platform Admin))•PROPERTY_CONTRACT_PROVISIONED

Provisioned 1-Year Platinum Contract #PKS-2026-042 via manual B2B order.

SUCCESS
[10:22:15]MANAGER(Ahmad (IT Manager))•WELCOME_CONTENT_MUTATED

Updated welcome video banner and personalized TV dining directory.

SUCCESS