CacheDependancy para vários itens armazenados em Cache
-
15-09-2020 - |
Pergunta
Eu gostaria de ter um item no ASP.NET CacheObject, que se fosse alterado um número de dependentes itens deveria ser removido
Então..Em um pedido de
- Se solicitado e existe no cache de remover o objeto raiz, toda a dependência será removido
- Verificação de raiz objeto no cache, se ele não existir, adicione-a
- Adicionar outros objetos para o cache com uma dependência em relação ao objeto raiz
Quando faço isso, eu recebo um erro "An attempt was made to reference a CacheDependency object from more than one Cache entry
"
Eu sei que você pode fazer um AggregateCacheDependency para aplicar muitas dependências de um item em cache, mas parece que você não pode fazer da outra maneira ao redor.
Tem qualquer um encontrou uma maneira de fazer isso?
aqui está um código, não é o que eu sou, na verdade, armazenar, mas ele representa a mesma tarefa
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}));
}
}
}
Solução
O código acima não funciona, a chave foi a criação de um novo CacheDependency cada vez.No não-pseudo-código que eu estava a tentar reutilizar o mesmo objeto, isto estava causando o erro descrito.
@Adeel & Jaroslav obrigado pelas respostas de qualquer maneira
Outras dicas
O problema de várias invalidations sobre um único evento é algo que o atualmente disponível caches de não lidar com nativamente ou de forma eficiente.Como o autor de TagCache, Eu convido você a experimentá-lo e ver se ele pode ser uma escolha melhor o seu cenário.