gpt4 book ai didi

c# - 如何检查 System.Runtime.Caching.ObjectCache 中的缓存策略?

转载 作者:可可西里 更新时间:2023-11-01 08:10:44 25 4
gpt4 key购买 nike

我正在使用新的 .NET 4.0 缓存命名空间:System.Runtime.Caching

现在,我只是在对新的 API 进行一些原型(prototype)设计/摆弄,以便找出最适合实际应用的东西。

与此一致,我正在尝试创建一个页面 (ASP.NET MVC),该页面基本上会转储缓存中的所有内容,尤其是以下信息:

  • 缓存键
  • 缓存对象
  • 缓存策略(过期日期等)
  • 缓存依赖项(如果有的话)

但是,除了键/对象,我似乎什么也得不到。

这是我目前正在使用的代码:

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”类能够公开我需要的信息(过期、依赖关系等——至少作为“getter”)。

但事实并非如此。它只有键、值和区域名称的属性。

我如何检查缓存中的项目并吐出我需要的信息?

我是否缺少命名空间/类?

编辑

看起来有一个 ChangeMonitor 类,但同样 - 这不会提供过期信息,它只允许您在删除缓存项时订阅事件。

必须有一种方法可以只获取缓存中的项目,以及它们何时过期。

编辑 2

不知道这是否应该是一个单独的问题,而且 - 我很困惑我应该给我的 ObjectCache 多长的生命周期。 MSDN 说它不是单例,实际上您可以创建多个 ObjectCache 实例。但这意味着什么,我必须在访问 ObjectCache 实例时使用完全锁定的单例?

最佳答案

在我看来,一旦 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();
}

关于c# - 如何检查 System.Runtime.Caching.ObjectCache 中的缓存策略?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4939385/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com