Ana içeriğe geç

Role Cache

Bu sayfa, role:{role_id} key ailesinin Qapu içindeki işletim sözleşmesini tanımlar.

Bu key ailesi, role entity bilgisini hızlı çözmek için kullanılır.

Key Pattern

  • role:{role_id}

Örnek:

  • role:7

Owner Service

  • Primary writer: role yöneten servis
  • Primary readers: API, auth middleware, projection builder
  • Secondary writer: read-through rebuild yapan servisler

Authoritative Source

  • roles

Temel İlke

  • Bu key role entity kaydının cache kopyasıdır.
  • DB authoritative katmandır.
  • Redis lookup maliyetini düşürür.

Kanonik Yapı

{
"role_id": 7,
"code": "project_admin",
"name": "Project Admin",
"is_active": true,
"updated_at": "2026-04-20T06:00:00Z"
}

Read / Write Paths

Read Path

  1. role:{role_id} Redis'ten okunur.
  2. Hit varsa role bilgisi doğrudan kullanılır.
  3. Miss varsa roles tablosundan rebuild edilir.

Write Path

  1. Role DB'de oluşturulur, güncellenir veya pasiflenir.
  2. Commit sonrası key invalidate edilir veya overwrite edilir.
  3. Sonraki read path gerekirse rebuild yapar.

Write Order

  1. roles authoritative kaynaktır.
  2. Redis key DB commit'inden önce güncellenmez.
  3. invalidate + rebuild varsayılan yaklaşımdır.

Failure ve Drift Senaryoları

Senaryo A: Redis miss

  • Beklenen davranış: DB fallback + write-back
  • Etki: ilk lookup yavaşlar, sonra hızlanır

Senaryo B: Role stale

  • Beklenen davranış: invalidate + rebuild
  • Etki: eski role metadata'sı auth zincirine sızmaz

Rebuild

Rebuild kaynakları:

  • roles

Rebuild adımları:

  1. role kaydı DB'den okunur
  2. gövde normalize edilir
  3. SETEX role:{role_id} ile yazılır

Gözlemlenebilirlik Metrikleri

  • role_cache_hit_ratio
  • role_cache_miss_total
  • role_cache_rebuild_total
  • role_cache_invalidation_total

TTL ve Invalidation

  • TTL: 10m - 30m

Invalidation tetikleri:

  1. role code değişirse
  2. role name değişirse
  3. role active flag değişirse

Çapraz Referanslar

  • /projects/qapu/services/redis/keyspace/permission-cache
  • /projects/qapu/services/redis/keyspace/user-auth-context