Как определить сложный объект без подходящих строковых свойств с помощью строкового ключа в простом кэше значений ключа? - PullRequest
0 голосов
/ 10 июля 2020

У меня есть пять различных типов объектов, несколько экземпляров которых я хочу сохранить в простом кэше значений ключа. В ходе исследования я выяснил, что System.Runtime.Caching.MemoryCache лучше всего подходит для моих требований (в основном из-за политик истечения срока действия и выселения, а также его поточно-ориентированного характера).

Однако есть одну вещь я до сих пор не могу понять. System.Runtime.Caching.MemoryCache ограничено использованием ключей string. Четыре из пяти моих типов объектов уже имеют строковые свойства, которые можно использовать для четкой идентификации моих объектов внутри этого кеша. Рассмотрим, например, мой класс Tag, у которого есть свойство под названием Name. Я определенно могу использовать это имя в качестве ключа в моем кеше, поскольку оно уникально и четко идентифицирует мой объект Tag.

Проблема в том, что один из моих типов объектов, называемый LoggingSpace, имеет строковые свойства, но ни один из них не идентифицирует этот объект четко. LoggingSpace идентифицируется объектом DirectoryTuple, который содержит два свойства string, называемые ClientDirectory и ServerDirectory. Первый описывает каталог на стороне клиента, а другой описывает каталог на стороне сервера. Теперь можно было бы порекомендовать взять один из этих каталогов и использовать его в качестве ключа, но это не поможет, например, если бы я искал объект LoggingSpace, который идентифицируется его ServerDirectory, но я знаю только о ClientDirectory .

У кого-нибудь есть идеи, как решить эту проблему? Может быть, есть другие структуры кеша, которые подходят лучше? Есть несколько вещей, которые мой кеш должен реализовать:

  • потокобезопасность
  • политики выселения
  • политики истечения срока

Я думал о с использованием двух кешей, один из которых обозначен ServerDirectory, а другой ClientDirectory. Но, ИМО, это было бы слишком сложно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...