ふりぶろぐ
Web Engineer's Blog
Java

【Java】Play framework 2.7でキャッシュを使ってみる

Java

キャッシュを使う機会があったので、まとめておきます。

また、頻発したエラーについては、おまけでまとめます。

概要

Play framework 2.7でCacheを使ってみました。

いくつか使えるライブラリがあるみたいですが、今回はehcacheを使用しました。

「警告が見つかり-Werrorが指定されました」というエラーが頻繁に出てしまい、結構悩みました。

非推奨のメソッドを呼び出したらダメみたいですね。

おまけで詳しく書いておきます。

使い方

今回はCacheUtilsというクラスを作成しました。

もともとシンプルな作りなので簡単に使えると思います。

ライブラリのインポート

ehcacheをインポートします。

build.sbtに1行加えるだけ。

libraryDependencies += ehcache

CacheUtilsを作成

ラッパークラスとしてCacheUtilsを用意しました。

そのまま使うと、毎回コントローラ側でDI(@Inject)しないといけないので、Utilsにしておくと良さそう。

特に解説するほど難しい記述はないですが、挙げるとしたらキャッシュ時間の指定方法。

10秒だったら「10s」、3分だったら「3mn」、8時間だったら「8h」のように指定します。

import play.cache.SyncCacheApi;
import play.libs.Time;

import javax.inject.Inject;
import java.util.Optional;

/**
 * キャッシュユーティリティ
 */
public class CacheUtils {
    private static SyncCacheApi cacheApi;

    @Inject
    public CacheUtils(SyncCacheApi syncCacheApi) {
        cacheApi = syncCacheApi;
    }

    /**
     * キャッシュを取得する
     *
     * @param key キー
     * @return Optional
     */
    public static <T> Optional<T> getOptional(String key) {
        return cacheApi.getOptional(key);
    }

    /**
     * キャッシュをセットする
     *
     * @param key   キー
     * @param value 値
     */
    public static void set(String key, Object value) {
        cacheApi.set(key, value, Time.parseDuration(null));
    }

    /**
     * キャッシュをセットする(時間指定)
     *
     * @param key        キー
     * @param value      Element value
     * @param expiration Ex: 10s, 3mn, 8h
     */
    public static void set(String key, Object value, String expiration) {
        cacheApi.set(key, value, Time.parseDuration(expiration));
    }

    /**
     * キャッシュを削除する
     *
     * @param key キー
     */
    public static void delete(String key) {
        cacheApi.remove(key);
    }
}

呼び出し

実際にCacheUtilsを呼び出してみます。

セットしてゲットするだけなので簡単に使えます。

“abcd”というキーに1234というInteger型をセットしています。(キャッシュ時間1分指定)

CacheUtils.set("abcd", 1234, "1mn");
Optional<Integer> cacheOptional = CacheUtils.getOptional("abcd");
cacheOptional.ifPresent(System.out::println);
結果
1234

おまけ

今回、このようなエラーが頻繁にでました。

Compilation error
警告が見つかり-Werrorが指定されました

Play2.6で使っていたソースコードを使い回しても、出るときはこのエラーが出ます。

結構悩んだのですが、どうやら非推奨のメソッドを呼び出そうとするとこのエラーが出るみたいです。

このエラーが出た場合は非推奨のメソッドを呼び出していないか確認してみてください。

Play2.7だと非推奨のメソッド使えないんですね。(使えても使わないほうが良いですが。)

まとめ

キャッシュってかなり便利ですよね。

レスポンス速度上げるために使ったり、値を引き回すためにつかったりと。

CacheUtilsを用意しておくと、どこにでも使い回せるので最初に用意しておくと便利だと思います。

良ければコピペして使ってみてください。

あと非推奨のメソッドは使わないように。

ABOUT ME
りーふ
たまにブログを書いてるWebエンジニア。 サーバーサイドメインでインフラとフロントエンドもたまにやります。 Javaが得意。 Play Frameworkが好き。 本業は迷惑をかけない程度に手を抜くスタイル。 意識高い系は苦手。