CacheDependancy для нескольких кэшированных элементов
Я хотел бы иметь элемент в ASP.NET CacheObject, который, если он будет изменен, будет удален ряд зависимых элементов
Итак.. В запросе
- Если появится запрос и он существует в кеше, удалите корневой объект, также будут удалены все зависимости.
- Проверьте наличие корневого объекта в кэше, если он не существует, добавьте его
- Добавить другие объекты в кеш с зависимостью от корневого объекта
Когда я делаю это, я получаю ошибку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 ответа
Приведенный выше код работает, ключ каждый раз создавал новую CacheDependency. В непсевдокоде, который я пытался использовать один и тот же объект, это вызывало описанную ошибку.
@Adeel & Jaroslav все равно спасибо за ответы
Проблема множественных аннулирований одного события - это то, с чем в настоящее время доступные кэши не справляются изначально или эффективно. Как автор TagCache, я приглашаю вас попробовать его и посмотреть, будет ли он лучшим выбором в вашем сценарии.