我听说.NET 4有一个新的缓存API.
好的,所以好的旧的System.Web.Caching.Cache(顺便说一下,仍然在.NET 4中)能够设置所谓的CacheDependency对象来确定缓存的项目是否过期.
还可以通过从中派生自定义子类来指定用于确定缓存项目是否仍然可用的自定义逻辑CacheDependency.
我很好奇,有没有办法在新的API中提供这样的逻辑?
我有一种情况需要用新的缓存依赖系统替换当前基于文件的缓存依赖系统.我正在寻找的是使用AppFabric进行缓存.我想知道表中通知应用程序数据更新的SQLDependencyCaching技术是否适用于AppFabric,就像在内置缓存的ASP.NET一样?
我对asp.net中可能的cachedependencies有点疑惑,我不知道如何使用它们.
我想以某种方式向HttpRuntime.Cache添加项目,如果我更改缓存中的其他元素,则元素应该无效.依赖关系应该由密钥定义.
我想要一个这样的函数:
public MyObject LoadFromCache(string itemDescriptor, IEnumerable<string> dependencies)
{
var ret = HttpRuntime.Cache[itemDescriptor] as MyObject;
if (ret == null)
{
ret = LoadFromDataBase(itemDescriptor);
//this is the part I'm not able to figure out. Adding more than one dependency items.
var dep = new CacheDependency();
dependencies.ForEach(o => dep.SomeHowAdd(o));
HttpRuntime.Cache.Add(
itemDescriptor,
ret,
dependencies,
System.Web.Caching.Cache.NoAbsoluteExpiration,
System.Web.Caching.Cache.NoSlidingExpiration,
Caching.CacheItemPriority.Normal,
null
);
}
return ret;
}
Run Code Online (Sandbox Code Playgroud)
帮助我解决这个问题.
我想我知道答案,但我无法在文档或文章中找到确定的是或否.
使用.Net 3.5 ASP.Net缓存,如果你让CacheDependency传递一个cacheKeys的字符串[],那么那些传递的cacheKeys是否会被插入到使用依赖项的Insert上的缓存中,如果它们还不存在?
CacheDependency dependency =
new CacheDependency(null, new string[] { "abc", "def", "ghi"});
HttpRuntime.Cache.Insert("123", "xxx", dependency);
Run Code Online (Sandbox Code Playgroud)
因此,当缓存项目"123"被插入时,如果缓存中没有一个带有"def"键的项目怎么办?它会被创建吗?
如果没有,有没有办法接受那个CacheDependency对象,并找出它创建的密钥,那么我可以循环它们并根据需要添加它们?
基本上,我试图允许将CacheDependency对象传递到我的自定义CacheManager对象方法中,而不是我现在需要的字符串[]数组.感谢您的任何帮助,您可以提供.