Gabbar
Gabbar

Reputation: 4066

Clear Sitecore cache for an item from cache programmatically

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());
}

Upvotes: 6

Views: 4910

Answers (1)

pbering
pbering

Reputation: 943

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();
    }
}

Upvotes: 6

Related Questions