データ・キャッシング

キャッシング機能

javaで有名なJCacheやEHCacheなどのように、クライアントでのキャッシングができます。これらは、例えばほとんど変わらないマスタデータを毎回サーバに取得するのではなく、一定期間、メモリもしくはディスクにキャッシングしておき、サーバ負荷を軽減するために利用できます。

まずは、キャッシュという1つの塊をCacheManager.create-cacheメソッドにて作成します。このとき、キャッシュ内の各オブジェクトの生存期限、キャッシュの最大数などを指定できます。最大数を越えた場合は、一番アクセスされていないオブジェクトを破棄します。 

        || キャッシュの作成
        def cm = {CacheManager.get-instance}
        def cache1 = {cm.create-cache
                         “cache1”,
                         max-elements-in-cache = 3,
                         expire-idle-time = 1s
                     }
        || キャッシュ”cache1”にオブジェクト登録
        {cache1.set “k1”, {Array}}
        {cache1.set “k2”, {HashTable}}
        {cache1.set “k3”, 10}

        || キャッシュからオブジェクト取得
        def v = cache1[“k1”]

メモリ上にあるキャッシュをディスクへ書き出すには、キャッシュ作成時にpersistent-disk引数にURLを指定しておくと、flushメソッドを実行した場合にディスクへ書き出します。 

        def cm = {CacheManager.get-instance}
        def cache =
            {cm.create-cache “disk-cache”, persistent-disk = {url “file/disk.cache”}}
        set cache[“k1”] = “val1”
        set cache[“k2”] = “val2”
        {cache.flush} || persistent disk

もうちょっと簡単にキャッシュを利用するために、with-cacheマクロが利用できます。このマクロは、もしキャッシュ内にオブジェクトがなければ、with-cacheの中身が実行され、結果がキャッシュへ格納され、戻り値を返します。キャッシュ内にオブジェクトがある場合、キャッシュから取得した値を戻します。

        def v1 =
            {with-cache “k1” of “cache1” do
                def v = “test”
                v
            }

パッケージ名:COM.CURLAP.LIB.CACHING