Grailsでmemcachedを使う

Java用のmemcachedクライアントである「spymemcached」を使います。
Grailsのversionは2.1.2です。

1. spymemcachedのインストール&コンパイル設定

grails-app/conf/BuildConfig.groovy

[groovy]
repositories {

grailsPlugins()
grailsHome()
grailsCentral()

// 下記を追加
mavenRepo ‘http://files.couchbase.com/maven2/’
}

dependencies {

// 下記を追加
compile ‘spy:spymemcached:2.8.9′
}
[/groovy]

2. MemcachedServiceの作成

grails-app/services/MemcachedService.groovy

[groovy]
import net.spy.memcached.AddrUtil
import net.spy.memcached.MemcachedClient
import org.springframework.beans.factory.InitializingBean

class MemcachedService implements InitializingBean {

static final Object NULL = “NULL”
def MemcachedClient memcachedClient

def void afterPropertiesSet() {
memcachedClient = new MemcachedClient(AddrUtil.getAddresses(“localhost:11211″))
}

def get(String key) {
return memcachedClient.get(key)
}

def set(String key, Object value) {
memcachedClient.set(key, 600, value)
}

def delete(String key) {
memcachedClient.delete(key)
}

def clear() {
memcachedClient.flush()
}

def update(key, function) {
def value = function()
if (value == null) value = NULL
set(key, value)
return value
}

def get(key, function) {
def value = get(key)
if (value == null) {
value = update(key, function)
}
return (value == NULL) ? null : value;
}
}
[/groovy]

3. MemcachedServiceの利用

[groovy]
class TopController {

def memcachedService

def index() {

def memcachedKey = ‘top’

def data = memcachedService.get(memcachedKey)

if (data) {
}
else {

data = NULL

// dataをとる処理

memcachedService.set(memcachedKey, data)

}

[
data: data
]

}
}
[/groovy]

4. ファイルのコンパイルと実行

この手順はほとんど下記にのってます。
http://www.ibm.com/developerworks/jp/java/library/j-memcached2.html

「memcached クライアントを Grails アプリケーションに追加する際に最初に行わなければならない作業は、該当する jar ファイルをダウンロードして、そのファイルを contactmanager/lib ディレクトリーにコピーすることです。このサンプル・アプリケーションには memcached の Java クライアントである Spymemcached を使用しているので、この JAR をダウンロードしてください。」

僕はなぜかこの部分がうまくいかず、libにいれても上手くいきませんでした。
※import net.spy.memcached.AddrUtilがNot foundだとエラーでてコンパイルできない症状。

ということで、Stack Overflowで教えてもらいました。
http://stackoverflow.com/questions/14049614/how-to-use-memcached-in-grails

で、Grailsのテストアプリに組み込んだら成功したのでこれでいけるみたいです。

↓テストアプリ
http://service.tnnsst35.me/weddingram/

ブラウザを開くたびにInstagram APIをたたいて写真をとってくる処理をする部分に使って、キャッシュデータがあればAPIをたたかずにキャッシュを表示するという使い方です。

おわり。

Pocket

Posted in Grails.

コメントを残す

メールアドレスが公開されることはありません。

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">