В ASP.NET Core у вас кэш над БД. Когда TTL истекает, сотни запросов одновременно пробивают кэш и штурмуют БД (cache stampede). Как спроектировать дедупликацию «получения значения» per-key без дедлоков и утечек, учитывая отмену/таймауты?
Сделать single-flight per key: ConcurrentDictionary<TKey, Lazy<Task<T>>> (или AsyncLazy) + GetOrAdd. Первый запрос запускает загрузку, остальные await той же Task. Важно: на ошибке/отмене удалять ключ из словаря, чтобы не закрепить failed-task; прокидывать CancellationToken; ставить таймаут и stale-while-revalidate для мягкого обновления. Для изоляции горячих ключей — пер-key SemaphoreSlim или Channel; результаты хранить в IMemoryCache с policy (TTL, size, eviction).
В ASP.NET Core у вас кэш над БД. Когда TTL истекает, сотни запросов одновременно пробивают кэш и штурмуют БД (cache stampede). Как спроектировать дедупликацию «получения значения» per-key без дедлоков и утечек, учитывая отмену/таймауты?
Сделать single-flight per key: ConcurrentDictionary<TKey, Lazy<Task<T>>> (или AsyncLazy) + GetOrAdd. Первый запрос запускает загрузку, остальные await той же Task. Важно: на ошибке/отмене удалять ключ из словаря, чтобы не закрепить failed-task; прокидывать CancellationToken; ставить таймаут и stale-while-revalidate для мягкого обновления. Для изоляции горячих ключей — пер-key SemaphoreSlim или Channel; результаты хранить в IMemoryCache с policy (TTL, size, eviction).
In the next window, choose the type of your channel. If you want your channel to be public, you need to develop a link for it. In the screenshot below, it’s ”/catmarketing.” If your selected link is unavailable, you’ll need to suggest another option. A vandalised bank during the 2019 protest. File photo: May James/HKFP. Judge Hui described Ng as inciting others to “commit a massacre” with three posts teaching people to make “toxic chlorine gas bombs,” target police stations, police quarters and the city’s metro stations. This offence was “rather serious,” the court said. SUCK Channel Telegram Invite up to 200 users from your contacts to join your channel
from us