1

ドメインクラスがあるとしましょう

class Profile{
    String name
    byte[] logo
}

そしてコントローラー:

class ImageController {
    def renderImage ={
       def image = Profile.get(params.id).logo
       if (image) {
            response.setContentLength(image.length)
            response.getOutputStream().write(image)
        } else {
             response.sendError(404)
        }    
    }
}

および gsp:

 <img width="48" 
      height="48"
      src="${createLink(controller: 'image', action: 'renderImage', id: 1)}">

わかりました ここまではとても良いです。画像がきれいに表示され、満足しています。ただし、gsp スニペットはメイン レイアウトの一部であるため、ページをリロードするたびに画像がレンダリングされます。

私の質問: この画像 (blob mysql) をキャッシュする方法はありますか? 第 2 レベルのキャッシュなどを有効にしていますが、画像がキャッシュされているかどうかはわかりません。これをどのように行いますか?

ありがとう。

4

1 に答える 1

2

プロファイル ドメイン クラスに追加static mapping = { cache true }して、キャッシュを有効にします。で Profile オブジェクトをフェッチする限りget(id)、キャッシュされたバージョンが使用されます。より複雑なクエリを使用している場合は、そのクエリもキャッシュ可能であることを grails に知らせる必要があります。

Grails マニュアルの「キャッシング」セクションを参照してください。また、休止状態の SQL ログを有効にして、オブジェクトがキャッシュされていることを確認すると役立つ場合があります。

于 2012-04-10T17:00:52.687 に答える