IHybridRequestCache.RemoveByTagAsync(tag) çağırır. HybridCache hem L1 (in-memory) hem L2 (Redis) girdilerini düşürür; çoklu-instance kurulumda ayrıca diğer node’lara CacheInvalidationIntegrationEvent broadcast edilir. Bu sayede güncelleme bir node’da yapılsa da tüm node’ların L1’i temizlenir.
İlgili dosyalar:
Application/DomainEventHandlers/Faq{Updated,Created,Deleted,Reordered}/InvalidateFaqCacheDomainEventHandler.cs ·
Application/SeedWork/Caching/CacheTags.cs ·
Application/IntegrationEventHandlers/CacheInvalidation/CacheInvalidationIntegrationEventHandler.cs ·
Domain/AggregatesModel/FaqAggregate/Specifications/PublicFaqsPagedSpecification.csÇalışma prensibi (FAQ örneği)
Public FAQ listesi sık çağrılır, değişimi nettir; bu yüzden cache’i hardcoded açıktır. Spec, sorguyu tag’ler:faqs tag’i altında toplanır. Tek bir RemoveByTagAsync("faqs") hepsini lazy invalidate eder. Tag string’i tek yerde sabitlenir ki spec ile handler typo’suz paylaşsın:
Sequence — güncelleme + çoklu-instance broadcast
Adım adım — invalidate
Aggregate güncellenir, event yayılır
Komut handler aggregate metodunu çağırır; metot içeride
AddDomainEvent(new FaqUpdatedDomainEvent(faqId, isActive)) biriktirir. SaveEntitiesAsync sonrası event dispatch edilir. Event yalın bir veri taşıyıcısıdır:Handler tag'i düşürür
InvalidateFaqCacheDomainEventHandler event’i dinler ve tag’i temizler. Hata cache invalidasyonunu fail-safe yapar — loglanır ama isteği bozmaz:Aynı tag için ayrı handler dosyaları vardır:
FaqCreated, FaqUpdated, FaqDeleted, FaqReordered. Hepsi Faqs tag’ini düşürür. Konvansiyon: handler’lar Application/DomainEventHandlers/<EventName>/InvalidateFaqCacheDomainEventHandler.cs altında, tek class tek dosya.Çoklu-instance broadcast
RemoveByTagAsync lokal L1 + L2’yi düşürür ve CacheInvalidationIntegrationEvent’i (Cache:BroadcastTagInvalidation açıksa) yayar. Diğer node’lar bunu tüketip yalnızca kendi L1’lerini temizler. Echo döngüsü SourceNodeId ile engellenir:RemoveByTagLocallyAsync tekrar broadcast yapmaz; bu da sonsuz döngüyü önler. Detay: Çoklu-instance cache.Yeni bir cache’lenebilir query eklemek
Yeni bir public/sık-okunan liste için cache açma sırası:Domain event(ler)i yay
Center aggregate’inin değiştiren metodlarında ilgili domain event’i (CenterUpdatedDomainEvent vb.) AddDomainEvent ile yayın. Bkz. Yeni Domain Event.Şu an Bağış/Etkinlik public listelerinde cache bilinçli olarak yoktur — değişiklikler anında görünsün diye. Ölçek gerektiğinde aynı reçete (spec’te
EnableCache + WithTags, CacheTags’e tag, invalidation handler) uygulanır.İlgili
HybridCache
L1/L2 yapısı ve DI kayıt sırası.
Tag Invalidation
Tag mekaniği derinlemesine.
Çoklu-instance
Broadcast ve echo guard.
Yeni Domain Event
Invalidation’ı tetikleyen event’i ekleme.