Как вы организуете и поддерживаете ключи кеша и очищаете их? - PullRequest
0 голосов
/ 17 июля 2011

Наша система использует кэширование AppFabric в Azure, и у нас есть несколько видов приложений и ролей, которые используют одни и те же кэшированные значения.Я ищу некоторые рекомендации о том, как организовать все ключи, а также иметь возможность отменять / сбрасывать записи, когда они были изменены.

Я поиграл с идеей иметь статический класс снабор методов, которые создают ключи.Например:

string CreateUserByIdKey(int userId) - Returns "User_5"
string CreateWidgetsByCompanyKey(int companyId) - Returns "Widgets_Company_5"

Таким образом, у меня есть полуструктурный способ создания и использования ключей в разных приложениях.Но это не выглядит очень элегантно и ремонтопригодно.Также требуется, чтобы я создал специальные методы сброса, которые знают, какой из этих ключей необходимо аннулировать при обновлении данных.

Какой лучший способ сделать это?

1 Ответ

1 голос
/ 17 июля 2011

Наш подход заключается в использовании CacheManager с расширением стратегии . CacheManager находится в основной части решения, и на это ядро ​​ссылаются все роли.

Для общих объектов, таких как стратегии генерации ключей кэша и даже имена конечных точек, у нас есть список WellKnownComponents. Это сгенерированный TT файл (ну, файлы), который может быть расширен частичными классами.

В моем случае я бы добавил функцию генерации идентификатора ключа кэша в мой хорошо известный класс компонентов, а затем сделал ссылку на приложение, например,

var seeker = CacheManager.Get<RequestOnly>(WellKnownComponents.Seeker.Caching.GetSeekerKey(seekerId), () => GetSeekerFromDataBase(seekerId));

Это примерно так, как мы это делаем. И да, вам все еще нужны специальные методы сброса для аннулирования, но с другой стороны, вы можете как разделить, так и объединить их там, где это важно и уместно (например, один ваш компонент, а не вокруг решения).

...