Löschen eines Elements aus dem Prefetch-Cache in 9.2

Aug 21 2020

Wir haben unsere Implementierung auf das programmgesteuerte Löschen des Sitecore-Cache für ein Element aus dem Cache gestützt , um ein Element wie unten beschrieben aus dem Prefetch-Cache zu löschen

Cache prefetchCache = GetPrefetchCache(Database database);
prefetchCache.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;
            }
        }
    }  

Die Cache-Klasse von 8.2 wird jedoch in 9.2 in ICacheInfo geändert, und RemoveKeysContaining ist in nicht verfügbar. Gibt es eine Möglichkeit, ein bestimmtes Element in 9.2 aus prefetchCache zu entfernen?

Antworten

1 HishaamNamooya Aug 21 2020 at 21:29

Sitecore hat die Implementierung in geändert ICacheInfo. Sie können die Methode jedoch weiterhin RemoveKeysContainingfür den Cache verwenden, nachdem Sie das Sitecore.Caching.Cache-Casting angewendet haben.

Das ICacheInfohat mehrere Implementierungen und die Klasse Cacheist eine der Implementierungen.

Bitte sehen Sie unten Code-Snippet:

Cache prefetchCache = GetPrefetchCache(database);

//Check for null before applying method
if (prefetchCache != null)
{
    prefetchCache.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 as Cache;
        }
    }
}  

Beachten Sie, dass der Cache aus dem Namespace Sitecore.Caching.Cacheder Assembly stammtSitecore.Kernel.dll