1. Sitecoreを使用した開発

キャッシュAPIの変更

Version:
日本語翻訳に関する免責事項

このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。

キャッシュAPIはSitecore 8.2でリファクタリングされました。このリファクタリングには、ソリューションをこの新しいバージョンにアップグレードするときに考慮する必要がある多くの破壊的変更が含まれています。

ICache<TKey>ICache (インターフェイスICache<string> を実装) の2つのインターフェイスが導入されました。すべてのCache APIは、Cacheクラスの代わりにこれらの抽象化を使用します。これにより、外部キャッシュ プロバイダーのアダプターを実装し、これらをカスタム キャッシュの基になるコンテナーとして使用できます。

最上位のカスタム キャッシュ ( HtmlCacheXslCacheなど) は、基本クラスを除き変更ありません。カスタムキャッシュは、主にDefaultCacheManagerDatabaseCaches (データベースごとに1つのキャッシュインスタンス)で作成されます。

外部キャッシュ・プロバイダーのアダプターの実装

カスタム キャッシュで外部キャッシュ プロバイダーを使用するには、カスタム キャッシュで文字列キーとオブジェクト キーのどちらが使用され、外部キャッシュが文字列のみをサポートするか、任意のオブジェクトをキーとしてサポートするかに応じて、ICacheまたはICache<TKey> を実装します。実装後、CacheContainers.configファイルのデフォルトではなく、新しいICache (またはICache<TKey>) 実装を使用するようにカスタムキャッシュを設定します。

Cacheクラスの変更

dataLengthパラメーターを受け入れたAddメソッドのいくつかのオーバーロードが削除されました。

  • void Add(オブジェクトキー、オブジェクトデータ、長いデータ長)

  • void Add(オブジェクトキー、オブジェクトデータ、long dataLength、TimeSpan slidingExpiration)

  • void Add(オブジェクトキー、オブジェクトデータ、long dataLength、DateTime absoluteExpiration)

  • void Add(オブジェクトキー、オブジェクトデータ、long dataLength、TimeSpan slidingExpiration、DateTime absoluteExpiration)

  • void Add(IDキー、オブジェクト データ、長いdataLength)

  • void Add(文字列キー、オブジェクトデータ、長いデータ長)

  • void Add(文字列キー、オブジェクトデータ、長いデータ長、EventHandler<EntryRemovedEventArgs> removedHandler)

  • CacheEntry Add(NotNull 文字列キー, NotNull オブジェクトデータ, long dataLength, TimeSpan slidingExpiration)

  • CacheEntry Add(NotNull 文字列キー, NotNull オブジェクトデータ, long dataLength, DateTime absoluteExpiration)

代わりにICacheSizeCalculationStrategyを使用して、キャッシュ エントリのサイズを計算します。

ICacheSizeCalculationStrategy

ICacheSizeCalculationStrategyインターフェイスは、キャッシュ エントリとキャッシュ インデックス (該当する場合) のサイズを計算します。キャッシュに追加するたびに呼び出され、キャッシュ エントリのサイズが決定されます。デフォルトのDefaultCacheSizeCalculationStrategyは、各キャッシュに使用されます。キャッシュ・エントリー・キーとキャッシュ・エントリー・データがICachebleを実装している場合は、GetDataLengthメソッドを使用してサイズを取得します。そうでない場合は、リフレクションによるサイズ計算が使用されます。

CacheManagerクラスの変更

CacheManagerクラスは、BaseCacheManagerクラスのラッパーになりました。BaseCacheManagerの実装は依存関係の挿入を使用して解決され、変更できます。BaseCacheManagerのデフォルトの実装はDefaultCacheManagerで、CacheManagerのロジックのほとんどが含まれています。BaseCacheManagerには、カスタムキャッシュコンテナの定義に使用するBaseCacheConfigurationも含まれています。CacheContainers.config.exampleで設定できます。キャッシュにコンテナーが指定されていない場合は、デフォルトのSitecore.Caching.Generics.Cache<TKey> インスタンスが使用されます。

GetNamedInstanceメソッドはCacheクラスから削除されました。代わりに、CacheManagerクラスで同じ名前のメソッドを使用する必要があります。このメソッドには、CacheManager内に新しいキャッシュインスタンスを作成する場合にキャッシュインスタンスを登録するかどうかを決定するregisterNewInstanceという新しいブールパラメータが必要です。Falseの場合、このキャッシュにはGetNamedInstanceFindCacheByName、またはGetAllCaches.移行するときは、キャッシュの各インスタンスが以前のバージョンregisterNewInstance登録されているため、wをTrueに設定します。

GetAllCachesフルキャッシュオブジェクトを返さなくなりました。これは、キャッシュに関する基本的なプロパティを含み、データを追加する操作を含まないICacheInfoの配列を返します。 ICacheInfoからフルキャッシュオブジェクトを取得する必要がある場合は、FindCacheByNameICacheInfoに保存されている名前で使用します。

  • ICache FindCacheByName(string name)又は

  • ICache<T> FindCacheByName<T>(文字列名)

キャッシュインデックス

いくつかのキャッシュは、部分キーを使用してキャッシュ・レコードを削除または取得する際のパフォーマンスを向上させるために、インデックスを格納するために使用されます。インデックス付きのキャッシュがリファクタリングされ、インデックスが統一されました ( AcessResultCachePathCacheを除く)。

インデックス作成をサポートするキャッシュ コンテナーは、IIndexedCache<T> インターフェイスを実装します。いくつかのキャッシュ ( ItemCacheIsUserInRoleCacheなど) は同じ機能を持っていたため、統合されました。それぞれがCustomIndexedCacheを継承し、キャッシュ コンテナのカスタム実装を指定できるGetIndexedCacheメソッドIIndexedCache 。デフォルトでは、IndexedCache<T> が使用されます。

インデックスはキャッシュ内に隠されており、エンド ユーザーには表示されません。これらはすべて、BaseCacheIndex基本クラスから継承します。このクラスには、インデックスのデフォルト実装が含まれています。 indexedCache.AddまたはindexedCache.Removeを呼び出すたびに、キャッシュ インデックスで適切なメソッドが呼び出されます。インデックス作成に使用するキーを定義するために、ICacheIndexにはGetIndexKeysメソッドが含まれています。返されるインデックス キーごとに、インデックスには現在のキャッシュ キーが格納されます。たとえば、IsUserInRole GetIndexKeysはアカウント名とロール名を返します。これは、キャッシュ・キー のAccountName = “User”, RoleName = “Admin”に対して、同じキャッシュ・キーを持つ2つのインデックス・エントリー (1つはユーザー用、もう1つはロール用) が作成されることを意味します。

おすすめの方法

Cache APIを使用するときは、次のベスト プラクティスに従ってください。

  • Cacheクラスを直接使用しないでください。CacheManagerクラスを使用して、ICacheオブジェクトを取得します。

  • キャッシュに追加する複雑なキーやオブジェクトがある場合は、それらにICacheableインターフェイスを実装することを検討してください。これにより、GetDataLengthメソッド内でサイズ計算を定義し、ストラテジーで高価なサイズ計算を回避できます。

  • キャッシュのインデックスを追加する場合は、CustomIndexedCache<TKey> から継承します。GetIndexedCacheメソッドでIIndexedCacheをインスタンス化します。デフォルトではIndexedCache<T>を使用できます。次に、ICacheIndex (BaseCacheIndexから継承) を実装します。インデックスを操作するための基本的なロジックがすべて含まれていますが、インデックスにデータを格納するために使用されるキーを定義できるため、GetIndexKeysを実装します。

この記事を改善するための提案がある場合は、 お知らせください!