9.2でプリフェッチキャッシュからアイテムをクリアする

Aug 21 2020

以下のように、プログラムでキャッシュからアイテムのSitecoreキャ​​ッシュをクリアして、プリフェッチキャッシュからアイテムをクリアする実装に基づいています。

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

ただし、8.2のCacheクラスは9.2ではICacheInfoに変更されており、RemoveKeysContainingは使用できません。9.2でprefetchCacheから特定のアイテムを削除する方法はありますか?

回答

1 HishaamNamooya Aug 21 2020 at 21:29

Sitecoreは実装をに変更しましたICacheInfo。ただし、RemoveKeysContainingSitecore.Caching.Cacheキャストを適用した後でも、キャッシュでこのメソッドを使用できます。

ICacheInfoは複数の実装があり、クラスCacheは実装の1つです。

以下のコードスニペットを参照してください。

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

キャッシュはSitecore.Caching.Cacheアセンブリの名前空間からのものであることに注意してくださいSitecore.Kernel.dll