Cacheサービス¶
Cacheとは¶
Cacheはアプリケーションサーバ上のメモリを利用して、オブジェクトの保存を行うことが可能な機能です。データベースアクセスや、ファイルアクセス等の取得結果をキャッシュすることによりアプリケーションのパフォーマンス向上を図ることが可能となります。
仕様¶
標準では、Cache実装としてEHCacheが利用されます。EHCacheに関しては、 http://ehcache.org をご覧ください。Cacheに登録したオブジェクトは、設定ファイルに指定した要素数、またはサイズの上限を超えた場合に破棄されます。また、有効期間を過ぎたオブジェクトも破棄対象となります。Cacheを利用する場合、そのCacheに対する設定は<CONTEXT_PATH>/WEB-INF/conf/im-ehcache-config/フォルダ配下に任意の名前のxmlファイルを配置する必要があります。以下に設定ファイル例を示します。<?xml version="1.0" encoding="UTF-8"?> <im-ehcache-config xmlns="http://www.intra-mart.jp/cache/ehcache/config" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.intra-mart.jp/cache/ehcache/config im-ehcache-config.xsd "> <cache name="myCache" enable="true" max-bytes-memory="10m" max-elements-on-memory="100" overflow-to-disk="true" max-bytes-disk="50m" max-elements-on-disk="500" time-to-idle-seconds="600" time-to-live-seconds="3600" /> </im-ehcache-config>注意
文字コードを UTF-8 にして保存してください。各設定に関する詳細は以下の通りです。
属性名 説明 name Cache名を設定します。 enable trueまたはfalseを指定します、 falseが指定された場合は該当のCacheは無効となります。 max-btyes-memory メモリ上にオブジェクトを格納する際の最大サイズを指定します。 1k, 10M, 50G等の表記が可能です。 max-elements-on-memory メモリ上にキャッシュするオブジェクトの最大数を指定します。 overflow-to-disk メモリ上にキャッシュするの領域の上限を超えた場合にディスクに書き出すか設定します。 max-bytes-disk ディスク上にオブジェクトを格納する際の最大サイズを指定します。 1k, 10M, 50G等の表記が可能です。 max-elements-on-disk ディスク上にキャッシュするオブジェクトの最大数を指定します。 time-to-idle-seconds アイドル時間(秒)を指定します、指定された時間対象となるオブジェクトが参照されなかった場合、そのオブジェクトは破棄されます。 time-to-live-seconds 生存期間(秒)を指定します、指定された生存期間を超えた場合そのオブジェクトは破棄されます。
プログラミング方法¶
function getUsers() { // cacheインスタンスを生成します、引数'myCache'はim-ehcache-configに定義されているCache名を指定する必要があります。 var cache = new Cache('myCache'); // キャッシュから情報の取得を試みます、取得できた場合はその値を返却します。 var users = cache.get('key'); if(users != null){ return users; } // キャッシュに情報が存在しなかったため、データベースから情報の取得を行います。 var database = new TenantDatabase(); var result = database.select('SELECT user_cd FROM b_m_account_b'); // データベースから情報の取得に失敗した場合は空の配列を返却します。 // 通常はログ出力、エラー情報の返却が必要となります、目的に合わせて適切に実装を行なって下さい。 if(result.error){ return []; } // 取得した情報をキャッシュに格納した後、返却します。 users = []; for(var i = 0, length = result.data.length; i < length; i++){ var record = result.data[i]; users.push(record.user_cd); } // キャッシュに格納し、返却します。 cache.put('key', users); return users; }データベースからデータを取得する際の例です
コラム
キャッシュの生存期間等はすべて設定ファイルに記述された内容に従います。
明示的にキャッシュの削除が必要となる場合はCache#removeまたはCache#removeAllを呼び出すことにより削除可能です。