こんにちは、アンダーソンです。
今回はキャッシュについてのTrailheadをクリアしたのでまとめていきます。
プラットフォームキャッシュとは
Salesforce セッションおよび組織のデータを後でアクセスするために保存するメモリレイヤのことです。APIを呼び出して時間のかかる作業を毎回したり、大量のデータに対して毎回SOQLを発行するような設計になっている際はキャッシュの利用をかんがえてみるのもありかもしれません。
使用するケース
- セッション全体を通して再利用されるか、すべてのユーザや要求にまたがって再利用される
- 静的である (急速に変化しない)
- 計算や取得にコストがかかる
使用する際はこの3点に当てはまるかどうかを考えた上で決めるのが良さそうですね。
制限
便利なキャッシュですがいくらでも使えるわけではありません。
- Enterprise Edition (デフォルトで 10 MB)
- Unlimited Edition (デフォルトで 30 MB)
- Performance Edition (デフォルトで 30 MB)
ちなみに購入で追加することもできるそうです。
使い方
Salesforceのプラットフォームキャッシュには二つの種類があり、それぞれでApexでの書き方が違ってきますので気をつけましょう。
組織キャッシュ
組織キャッシュには、組織の誰もが使用できる組織全体のデータが保存されます。組織キャッシュは、セッション、要求、組織ユーザおよびプロファイルをまたがってアクセスできます。
Cache.OrgPartition Orgpart = Cache.Org.getPartition('local.Keneloper');
List<Contact> cacheList = [SELECT Id,Name FROM Contact Where Level__c = 'Primary' LIMIT 1000];
Orgpart.put('ConatctList',cacheList);
List<Contact> getCacheList = (List<Contact>)Orgpart.get('ConatctList');
組織である一定の条件が表示されるリストを毎回SOQLで呼び出すのではなく、キャッシュに入れておくような形です。Cache.Orgが組織キャッシュを意味しています。
getPartitionでパーティション名を引数にしてキャッシュパーティションを取得します。
受ける側の型はOrgPartitionであることに気をつけましょう。
セッションキャッシュ
セッションキャッシュには、個々のユーザおよびそのユーザのセッションに結び付けられたデータが保存されます。セッションの最大有効期限は 8 時間です。
Cache.SessionPartition sessionPart = Cache.Session.getPartition('local.Keneloper');
List<Contact> cacheList = [SELECT Id,Name FROM Contact CreatedById = '005×××××××' LIMIT 1000];
sessionPart.put('MyContactList', cacheList);
String getCacheList = (List<Contact>)sessionPart.get('MyContactList');
ユーザごとに変数を渡したりして値を変えて行くのがいい使い方かと思います。
Visualforceでの表示
組織キャッシュでは$Cache.Org、セッションキャッシュでは$Cache.Sessionのグローバル変数を使用してアクセス可能です。
<apex:outputText value="{!$Cache.Session.local.Keneloper.MyContactList.size}"/>
上記の場合は前項でのセッションキャッシュに当てはめられたキャッシュの値にアクセスして表示できます。さらにリストなどの場合sizeをつけるとList.size()メソッドを呼び出すことも可能です。
まとめ
なにげに上級デベロッパー試験範囲なキャッシュ。
組織のパフォーマンスを考える上でも必要な知識なのでぜひ頭に入れておきましょう。
コメント