IHybridRequestCache
Uygulama katmanının cache arayüzü. HybridCache’i doğrudan inject etmek yerine bu interface kullanılır — multi-instance broadcast hook’u ve domain-friendly imza için. Tanım: src/BuildingBlocks/BuildingBlocks.Caching/IHybridRequestCache.cs.
RemoveByTagAsync vs RemoveByTagLocallyAsync farkı için: Invalidation ve Multi-Instance.
Stampede koruması
HybridCache.GetOrCreateAsync aynı key için paralel gelen istekleri tek factory çağrısında birleştirir: cache miss anında ilk istek factory’yi (DB sorgusu) çalıştırır, diğerleri sonucu bekler. Bu sayede cold cache + yüksek trafik durumunda DB’ye yüzlerce eşzamanlı sorgu gitmez. Davranış HybridCache infrastructure’ından gelir; ek kod gerektirmez.
Kayıt sırası KRİTİK
HybridCache, L2 backend’ini (IDistributedCache, Redis) kayıt anında keşfeder. Bu yüzden Redis önce register edilmiş olmalı:
AddCache ne register eder:
Spec tabanlı cache — CachedRepository<T>
CachedRepository<T> (src/.../Infrastructure.EFCore/Repositories/CachedRepository.cs), IReadRepository<T> üzerinde bir HybridCache decorator’üdür. Read path’i spec cache açıksa otomatik cache’ler:
EnableCache + projeye özel WithCacheTtl/WithTags):
WithCacheTtl adı bilinçli seçilmiştir — Ardalis’in WithTimeToLive’i ile ambiguous reference olmasın diye. TTL/tag bilgisi spec instance’ına ConditionalWeakTable üzerinden attach edilir (SpecificationExtensions); spec GC olunca metadata da serbest kalır.EnableCache(name, args...) zinciri spec’in CacheKey + CacheEnabled property’lerini set eder (Ardalis 9.x). args cache key’in parçası olur — yani her sayfa/arama varyantı ayrı entry, ama hepsi aynı faqs tag’i altında.
Cache ne zaman devre dışı?
CachedRepository.CacheDisabled(spec) üç koşuldan biri sağlanırsa raw EF Core’a düşer:
Ayrıca
AnyAsync ve spec’siz çağrılar (ListAsync(), GetByIdAsync(...)) bilerek passthrough’tur — cache istiyorsan CompositeSpecification + EnableCache kullan.
İlgili
Invalidation
Tag düşürme: domain event handler’da
RemoveByTagAsync.Multi-Instance Senkron
RemoveByTagLocallyAsync + echo guard.Specification
Ardalis.Specification ve cache zinciri.
Cache Mimarisi
Genel bakış ve konfigürasyon.