intra-mart Accel Platform SAStruts+S2JDBC プログラミングガイド 第17版 2020-08-01

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-bytes-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 生存期間(秒)を指定します。指定された生存期間を超えた場合そのオブジェクトは破棄されます。

コラム

「max-bytes-memory」及び、「max-bytes-disk」属性が設定されている場合、Cacheにオブジェクトを登録する際に、そのオブジェクトのサイズの計算処理が行われます。
この際、登録するオブジェクトが、別のオブジェクトの参照を大量に持つ場合、計算処理に時間がかかりパフォーマンスの低下の原因となる可能性があります。
登録するオブジェクトが1000以上の参照を持つ場合、下記のようなメッセージがログに出力されます。
The configured limit of 1,000 object references was reached while attempting to calculate the size of the object graph.
Severe performance degradation could occur if the sizing operation continues.
This can be avoided by setting the CacheManger or Cache <sizeOfPolicy> elements maxDepthExceededBehavior to "abort" or adding stop points with @IgnoreSizeOf annotations.
If performance degradation is NOT an issue at the configured limit, raise the limit value using the CacheManager or Cache <sizeOfPolicy> elements maxDepth attribute.
For more information, see the Ehcache configuration documentation.
このログが出力される場合は、キャッシュに格納するオブジェクトの構成を見直すか、「max-bytes-memory」または、「max-bytes-disk」の代わりに、「max-elements-on-memory」または「max-elements-on-disk」の利用を検討して下さい。