2011-02-08 3 views
13

Я использую новое пространство для кэширования .NET 4.0: System.Runtime.Caching.Как проверить политики кэша внутри System.Runtime.Caching.ObjectCache?

Теперь я просто делаю прототип/скрипку с новым API, чтобы лучше всего подходить для реального приложения.

В соответствии с этим, я пытаюсь создать страницу (ASP.NET MVC), что в основном все, дамп в кэше, в частности, следующую информацию:

  • Cache Object Key
  • Cache
  • политики кэширования (дата истечения срока действия и т.д.)
  • зависимости кэша (если таковые имеются)

Однако, я не могу показаться, чтобы получить что-нибудь кроме ключа/объекта.

Вот код, я в настоящее время играю с:

public ActionResult Index() 
{ 
    var cache = MemoryCache.Default; 

    // i can get the list of cache keys like this: 
    var cacheKeys = cache.Select(kvp => kvp.Key).ToList(); 

    // i can also get a strongly-typed "CacheItem" like this: 
    CacheItem item = cache.GetCacheItem("someKey"); 

} 

я бы надеялся, что класс «CacheItem» подвергнет информацию я требовать (истечения срока действия, зависимость и т.д. - по крайней мере, как «добытчики») ,

Но это не так. Все, что у него есть, это свойства для имени ключа, значения и имени региона.

Как я могу проверить элементы в кеше и выплюнуть требуемую информацию?

Существует ли пространство имен/класс, который отсутствует?

EDIT

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

должен быть способом просто захватить элементы в кеше и когда они истекут.

EDIT 2

Не знаю, если это должно быть индивидуальный вопрос, но и - я запутался, как на то, что всю жизнь я должен дать свое ObjectCache. MSDN говорит, что это не синглтон, и вы можете создать несколько экземпляров ObjectCache. Что это значит, я должен использовать полностью заблокированный синглтон при доступе к экземпляру ObjectCache?

ответ

9

Мне не кажется, что есть способ получить CacheItemPolicy, как только он будет добавлен в коллекцию кеша.

Лучше всего об этом можно подумать о том, чтобы кэшировать объект политики вместе с элементом, который вы хотите кэшировать, но просто добавляете «Policy» к имени ключа, чтобы впоследствии вы могли получить политику. Это, очевидно, предполагает, что вы контролируете фактическое добавление элемента в кеш в первую очередь. Пример ниже:

public ActionResult Index() 
    { 
     string key = "Hello"; 
     string value = "World"; 

     var cache = MemoryCache.Default; 
     CacheItemPolicy policy = new CacheItemPolicy(); 
     policy.AbsoluteExpiration = DateTime.Now.AddDays(1); 
     cache.Add(new CacheItem(key, value), policy); 
     cache.Add(new CacheItem(key + "Policy", policy), null); 

     CacheItem item = cache.GetCacheItem(key); 
     CacheItem policyItem = cache.GetCacheItem(key + "Policy"); 
     CacheItemPolicy policy2 = policyItem.Value as CacheItemPolicy; 

     ViewBag.Message = key + " " + value; 

     return View(); 
    } 
+0

Yup, я думал об этом.Может быть, просто для прототипирования, я сделаю это, а затем верните код в нормальное состояние, когда я закончил. Тем не менее, я надеялся на облегченную программу мониторинга кеша на реальном сервере - звучит так, как будто это будет невозможно. – RPM1984

Смежные вопросы