I want to clear Sitecore cache for an item programmatically. I ran the code below. After that I tried to do a web.GetItem()
on the deleted id and I still get a null
. Any suggestions?
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());
}
Looks like you have missed the prefetch cache, here is how to get it:
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;
}
}
}
And the html cache also:
private void ClearAllHtmlCaches()
{
foreach (var info in Factory.GetSiteInfoList())
{
info.HtmlCache.Clear();
}
}