キャッシュ処理の詳細最終更新日: 2020年8月10日
R8 | R9

キャッシュについて

Wagbyはデータベースから読み込んだ値をメモリ内にキャッシュしています。これによりシステム全体のパフォーマンスを向上させています。

モデルごとにキャッシュを使うかどうかを指定する

モデルごとにキャッシュを有効にするかどうかを指定することができます。 ただし、ワークフローを有効にしたモデルは "データベースのキャッシュを完全に無効にする" をチェックすることはできません。

サイズの設定

アプリケーション全体のキャッシュサイズを指定することができます。

モデルごとにキャッシュサイズを指定することはできません。内部ではオープンソースの ehcache ライブラリを用いており、LRU アルゴリズムによって、よく使われるデータが優先してキャッシュします。

JVMヒープメモリ領域に空きが少なく、キャッシュ用のメモリ領域を確保できない場合に "CacheManager configuration: You've assigned more memory to the on-heap than the VM can sustain, please adjust your -Xmx setting accordingly" というエラーメッセージがコンソールに表示されます。この場合はヒープメモリ領域を増やすか、キャッシュ用のメモリ領域を減らしてください。(ヒープメモリ領域を増やす場合は、指定したサイズよりも大きな物理メモリがあることが前提となります。)

一時ファイル

wagbyapp/temp フォルダに一時ファイルが生成されることがあります。Wagbyアプリケーション停止後であれば、wagbyapp/temp フォルダに残った一時ファイルを手動で削除することができます。

キャッシュの種類と性質

キャッシュは「ストアモデル」と「選択肢」があります。

区分説明Time To LiveTime To Idle
ストアモデル データベースから読み込んだ1データ。スクリプトに関するマニュアルでは「エンティティ」と表記することもある。 600 sec
(10分)
600 sec
(10分)
選択肢 登録、更新、詳細、一覧画面のモデル参照項目で表示される「内容」部の文字列。 無制限 259,200 sec
(72時間)

TTL値とTTI値は、WEB-INF/classes/ehcache.xml で指定しています。

1リクエスト間のキャッシュ

キャッシュを無効にした場合でも、1リクエスト間(WebブラウザとWebサーバ間の通信のやりとり)で発生したデータベースとのやりとりはメモリにキャッシュされます。レスポンスを返した段階で、このキャッシュは自動的に消去されます。キャッシュ有効期間は非常に短いですが、若干のパフォーマンス改善につながります。

この「1リクエスト間のキャッシュ」を無効にすることもできます。この場合、常にデータベースから値を読み込むようになります。

定義方法

「画面 > その他 > データベースの詳細」で「キャッシュを有効にする」のチェックをはずしたとき、さらに「Javaソースコードの設定」にある「データベースのキャッシュを完全に無効にする」をチェックします。(標準ではチェックされていないため、1リクエスト間のキャッシュは有効となっています。)

図2 データベースのキャッシュを完全に無効にする

よくある質問と回答

誰かが操作中にキャッシュクリア処理を行なっても問題ありませんか。

Wagbyではジョブ実行時にキャッシュをクリアする指定を行うことができます。または REST API を利用してキャッシュクリアを指示することもできます。

もし誰かが操作途中にキャッシュがクリアされた場合、キャッシュからのデータを取得できなければデータベースから取得するようになっているため、問題ありません。

関連するページ