Salesforce開発におけるキャッシュデータについて
Salesforceには、プラットフォームキャッシュと呼ばれるセッションおよび組織のデータを保存するためのメモリレイヤがあります。
これがあることによりデータのやり取りが高速になり、作業の効率化を図れます。プラットフォームキャッシュはいくらでも使える訳ではなく、エディションごとに制限があります。
Enterprise Editionで10MB、Unlimited EditionとPerformance Editionは30MBです。必要であれば、追加購入が可能です。
たとえば、大量のデータに対し何度もSOQLを発行する場合、プラットフォームキャッシュを利用することでデータへのアクセスの待ち時間が短縮され、作業が効率化されます。
出典:プラットフォームキャッシュの制限
参照:https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_platform_cache_limits.htm
Salesforceプラットフォームキャッシュの種類
プラットフォームキャッシュには組織キャッシュとセッションキャッシュがあり、それぞれ使用するコードが異なります。
下記にてそれぞれのキャッシュについて簡潔に紹介します。
組織キャッシュ
組織キャッシュは、組織の皆が使用できるデータが保存されます。
セッションや要求、組織ユーザおよびプロファイルを通じてアクセス可能です。組織キャッシュの値は、Cache.OrgとCache.OrgPartitionクラスを利用します。
たとえば、たとえば、名前空間がA、パーティションがB、キーがCの場合組織キャッシュからキャッシュ値を取得する場合、
Object obj = Cache.Org.get('A.B.C');
DateTime dt2 = (DateTime)obj;
で取得が可能です。
セッションキャッシュ
セッションキャッシュとは、個別のユーザとそのユーザのセッションに結び付いたデータが保存されているキャッシュのことです。
セッションキャッシュの値は、Cache.SessionとCache.SessionPartitionクラスを使用します。
たとえば、呼び出し元クラスのデフォルトパーティションと名前空間を参照する際に、キーがAの場合は
Cache.Session.put('A', dt);
if (Cache.Session.contains('A')) {
DateTime cachedDt = (DateTime)Cache.Session.get('A');
}
で可能です。
Salesforceで開発中にキャッシュクリアする方法
Salesforceではデフォルトでキャッシュがたまるように設定されていますが、データキャッシュの機能を無効化してキャッシュクリアすることも可能です。
その場合、まずSalesforceUIの[設定] から[セッションの設定] を選択します。その次に[パフォーマンスを向上させるためにブラウザの安全で永続的なキャッシュを有効にする]のチェックボックスをオフにして、[保存]をクリックします。
もしサーバとの大規模なデータのやり取りを頻繁に行っていた場合、キャッシュクリアすることでページの読み込みが遅くなる可能性があります。
Salesforceアプリケーションにおけるキャッシュクリアについて
Salesforceアプリケーションにおいても、キャッシュクリアすることが可能です。
キャッシュはナビゲーションメニューからカスタマイズも可能です。ナビゲーションメニューに移動し、[設定] | [オフライン個人設定]からオフラインで使用可能にする項目を選択できます。キャッシュのクリアはアプリケーションのパフォーマンスに支障がある場合に、それを直すために行われます。
もし変更した設定がうまく表示されない場合、キャッシュクリアによって変更が適用される可能性があります。
Salesforce アプリケーションのキャッシュクリア手段
Salesforce アプリケーションの画面からキャッシュクリアは可能です。
Salesforce for AndroidかSalesforce for iOSが組織にインストールされた際は自動的にアプリケーションのキャッシュは有効なっています。
これを無効にするには、まず使用しているハードのOSがサポートされているかを確認しましょう。サポートされていれば、次にアプリケーションユーザプロファイルから[設定]を選択、[詳細]を選択へと進みます。そして[キャッシュされたデータをクリア]をクリックすることで完了です。その後はアプリケーションを閉じ、再度開いてページを更新してみて変更されているかをチェックしましょう。
もしアプリケーションの読み込み時間の遅延が生じている時、キャッシュクリアで解決する可能性もあるので、ぜひ試してみましょう。
Salesforce アプリケーションのキャッシュクリアによる影響
Salesforce アプリケーションのキャッシュが空の場合、オフライン中にアプリケーションにアクセスできなくなります。
ユーザは、最近アクセスしたレコードのセットにもアクセスできなくなります。Salesforceからログアウトした場合も再度キャッシュが空になってしまう点には注意が必要です。
もしサーバールームなどでインターネットに出られない仕事現場で作業をする必要がある場合、キャッシュクリアでアプリケーションを使用した作業は全く行えなくなり、作業の進行を妨げる恐れがあります。
キャッシュクリアを利用して、組織のパフォーマンスを考えよう
キャッシュの機能は仕事の高速化を図るために重要なものですが、時にはトラブルの原因にもなります。
必要に応じ、組織のパフォーマンスを考慮してキャッシュクリアを使用しましょう。]]>