У меня есть пять различных типов объектов, несколько экземпляров которых я хочу сохранить в простом кэше значений ключа. В ходе исследования я выяснил, что System.Runtime.Caching.MemoryCache лучше всего подходит для моих требований (в основном из-за политик истечения срока действия и выселения, а также его поточно-ориентированного характера).
Однако есть одну вещь я до сих пор не могу понять. System.Runtime.Caching.MemoryCache ограничено использованием ключей string
. Четыре из пяти моих типов объектов уже имеют строковые свойства, которые можно использовать для четкой идентификации моих объектов внутри этого кеша. Рассмотрим, например, мой класс Tag
, у которого есть свойство под названием Name
. Я определенно могу использовать это имя в качестве ключа в моем кеше, поскольку оно уникально и четко идентифицирует мой объект Tag
.
Проблема в том, что один из моих типов объектов, называемый LoggingSpace
, имеет строковые свойства, но ни один из них не идентифицирует этот объект четко. LoggingSpace
идентифицируется объектом DirectoryTuple
, который содержит два свойства string
, называемые ClientDirectory
и ServerDirectory
. Первый описывает каталог на стороне клиента, а другой описывает каталог на стороне сервера. Теперь можно было бы порекомендовать взять один из этих каталогов и использовать его в качестве ключа, но это не поможет, например, если бы я искал объект LoggingSpace
, который идентифицируется его ServerDirectory
, но я знаю только о ClientDirectory
.
У кого-нибудь есть идеи, как решить эту проблему? Может быть, есть другие структуры кеша, которые подходят лучше? Есть несколько вещей, которые мой кеш должен реализовать:
- потокобезопасность
- политики выселения
- политики истечения срока
Я думал о с использованием двух кешей, один из которых обозначен ServerDirectory
, а другой ClientDirectory
. Но, ИМО, это было бы слишком сложно.