我想以编程方式清除某个项目的 Sitecore 缓存。我运行了下面的代码。之后,我尝试对已删除的 id 执行 web.GetItem,但仍然得到 null。有什么建议吗?
Database db = new Database("web");
if (ID.IsID(id))
{
ID itemID = new ID(id);
//clear data cache
db.Caches.DataCache.RemoveItemInformation(itemID);
//clear item cache
db.Caches.ItemCache.RemoveItem(itemID);
//clear standard values cache
db.Caches.StandardValuesCache.RemoveKeysContaining(itemID.ToString());
//remove path cache
db.Caches.PathCache.RemoveKeysContaining(itemID.ToString());
}
看起来您错过了预取缓存,以下是获取它的方法:
private Cache GetPrefetchCache(Database database)
{
foreach (var cache in global::Sitecore.Caching.CacheManager.GetAllCaches())
{
if (cache.Name.Contains(string.Format("Prefetch data({0})", database.Name)))
{
return cache;
}
}
}
还有 html 缓存:
private void ClearAllHtmlCaches()
{
foreach (var info in Factory.GetSiteInfoList())
{
info.HtmlCache.Clear();
}
}