Flowchart · HybridCache
HybridCache.GetOrCreateAsync làm gì
Luồng HybridCache.GetOrCreateAsync
GetOrCreateAsync kiểm tra L1 trong tiến trình, rồi L2 Redis; chỉ khi cả hai miss mới gọi factory một lần cho mọi request cùng khoá, ghi kết quả vào cả hai tầng rồi trả về.
KHÔNG
CÓ
CÓ
KHÔNG
Request
GetOrCreateAsync(key)
Có trong L1?
IMemoryCache
Trả ngay từ L1
trong tiến trình
Có trong L2?
Redis
Nạp lên L1 rồi trả
deserialize từ Redis
Gọi factory một lần
truy vấn database
Ghi cả L2 và L1
Expiration · LocalCacheExpiration
Trả kết quả
cho mọi request đang chờ
100 request cùng khoá, cùng miss: chỉ một
request chạy factory, 99 request còn lại chờ kết quả đó.
TTL của L1 ngắn hơn L2 (L2 5 phút thì L1 1 phút):
lưới an toàn khi L1 các pod lệch nhau.
CHÚ GIẢI
Vào / trả về
Kiểm tra tầng cache
Bước xử lý
Chống stampede
© tiennhm