多个缓存项的CacheDependancy

时间:2010-07-14 09:32:45

标签: asp.net caching cache-dependency

我想在ASP.NET CacheObject中有一个项目,如果它被更改,将删除一些依赖项目

所以......在请求中

  1. 如果提示并且它在缓存中存在,则删除根对象,所有依赖关系也将被删除
  2. 检查缓存中的根对象,如果它不存在,则添加
  3. 将其他对象添加到缓存中,并依赖于根对象
  4. 当我这样做时,我收到错误“An attempt was made to reference a CacheDependency object from more than one Cache entry

    我看到你可以使用AggregateCacheDependency将许多依赖项应用于一个缓存项,但是看起来你不能反过来这样做。

    有没有人找到办法做到这一点?

    这里有一些代码,它不是我实际存储的内容,但它代表了相同的任务

    public class HomeController : Controller
    {
        private const string ROOT_KEY = "ROOT";
    
        protected override void Initialize(System.Web.Routing.RequestContext requestContext)
        {   
            base.Initialize(requestContext);
    
            if(Request.QueryString["clearcache"]!=null){
                // removed the root, hopefully removing all dependents
                HttpContext.Cache.Remove(ROOT_KEY);
            }
    
            if (HttpContext.Cache[ROOT_KEY] == null)
            {
                // create the root entry
                HttpContext.Cache[ROOT_KEY] = string.Empty;
            }
    
            if(HttpContext.Cache[Request.Url.AbsolutePath]==null){
    
                // add the url if not already added
                HttpContext.Cache.Insert(
                    Request.Url.AbsolutePath, string.Empty, 
                    new CacheDependency(null, new []{ROOT_KEY}));
            }
        }
    }
    

2 个答案:

答案 0 :(得分:3)

上面的代码确实有效,关键是每次都创建一个新的CacheDependency 。 在非伪代码中,我试图重用同一个对象,这导致了所描述的错误。

@Adeel&无论如何,Jaroslav感谢你的回复

答案 1 :(得分:0)

单个事件发生多次失效的问题是当前可用的缓存无法原生或有效处理的问题。作为TagCache的作者,我邀请您试一试,看看它是否可能是您的方案中更好的选择。