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
1
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:2
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.3
Ç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ı:1
Spec'te cache'i etkinleştir
İlgili
Specification<T> içinde sorguyu tag’leyin:2
Tag'i CacheTags'e ekle
const string’i referans alın, elle string yazmayın.3
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.4
Invalidation handler'ı yaz
Application/DomainEventHandlers/CenterUpdated/InvalidateCenterCacheDomainEventHandler.cs:Ş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.