В начале года я опубликовал статью про гибридное кэширование.
Гибридное кэширование в ASP.NET Core
В .NET 9 появилась новая библиотека для кэширования — HybridCache . В статье расскажу, что это такое...
habr.comПрошло уже больше месяца, а стабильная версия nuget-пакета Microsoft.Extensions.Caching.Hybrid так и не вышла.
Я не делаю прогнозы по датам выхода, но хочу порассуждать на тему того, чего ожидаю от стабильной версии. И чего — точно нет.
Начну с последнего — каких изменений я не ожидаю
Изменение состава и сигнатур текущих методов. Если следить за выходом новых версий пакета Microsoft.Extensions.Caching.Hybrid, можно заметить, что методы объекта HybridCache не меняются уже давно. Из этого можно сделать вывод, что в стабильной версии мы увидим тоже самое, что наблюдаем сейчас.
Какие изменения я ожидаю увидеть
Удаление объекта из кэша по тегам. На момент написания статьи метод RemoveByTagAsync вообще не имел реализации. Сейчас в версии 9.2.0-preview.1.25105.6 он реализован и вполне себе работает, так что в релизную версию явно войдёт.
Не удивлюсь, если изменится логика присваивания тегов. Сейчас для многих она может быть неочевидной. Разберём пример:
await cache.GetOrCreateAsync(
"someKey",
async ct => await SomeFuncAsync("someKey", ct),
options,
["tag1", "tag2", "tag3"],
cancellationToken);
await cache.GetOrCreateAsync(
"someKey",
async ct => await SomeFuncAsync("someKey", ct),
options,
["tag1", "tag4"],
cancellationToken);
Представим, что метод GetOrCreateAsync
вызывается несколько раз с одним и тем же ключом, но разным набором тегов. Теги будут присвоены только при первом попадании объекта в кэш, то есть в момент его извлечения из хранилища. Когда проектируем приложение, не всегда заранее известно, в какой из вызовов GetOrCreateAsync
объект будет извлекаться из кэша, а в какой — из хранилища. Оно и логично — метод специально создали так, чтобы мы не задумывались об этом. Соответственно, сейчас при вызове этого метода мы не можем определить, какой из наборов тегов ляжет в кэш.
И тут у меня два варианта развития событий: или логика поменяется и теги будут перезаписываться всегда — независимо от того, берётся объект из кэша или хранилища. Или при написании программы нужно будет следить, не передаём ли мы разные наборы тегов.