Grails + Redis を利用してみる

| コメントをどうぞ

Redisが気になっていたので、RedisをGrailsから扱ってみたいと思います。
今回もまたニッチな内容をお届けしていきます。
 
 

1. 検証環境

  • Grails: 2.1.1
  • Groovy: 2.0.4
  • Java: 1.6.0_35
  • Redis: 2.4.17

 

2. Grailsアプリケーションの設定

コマンドラインからアプリの雛形を作成していきます。
また、利用するプラグインもインストールしておきます。

$ grails create-app GrailsRedisSample
$ grails install-plugin redis-gorm

Redisプラグインというものもありますが、Redis GORMよりもローレベルな階層でRedisを扱う場合にはそちらの方が良いでしょう。
今回は、GORMベースで簡単に扱いたいので、Redis GORMプラグインを利用します。

 

3. Redisとの連携を記述

Redisとの連携を設定ファイルに記述していきます。
今回利用するRedisは、HomeBrewでインストールしたものを利用します。

grails.'redis-gorm'.host="localhost"  //ホスト名
grails.'redis-gorm'.port=6379         //Redosが使用するポート番号
grails.'redis-gorm'.password=""       //デフォルトは空
grails.'redis-gorm'.pooled=true
grails.'redis-gorm'.resources=15
grails.'redis-gorm'.timeout=5000

上記、設定を「 /grails-app/conf/Config.groovy 」に記述しておくとRedisと接続します。

 

4. ドメインクラスの作成

GORMベースで扱うということなので、ドメインクラスを用意します。

$ grails create-domain-class Sample

ドメインの雛形ができたら、以下のようにします。

class Sample {
    static mapWith = "redis"

    String key;
    String value;

    static constraints = {
        key blank:false
        value blank:false
    }

    static mapping = {
        key index:true
    }
}

hibernateと併用するためには、mapWith変数にてredisを指定します。
このドメインはRedis用であることをシステムに伝えるために必要です。
あとは、普通のマッピングクラスのように作成します。
mapping変数にて、指定したものがRedisで捜索するために必要なキー値となります。
実際にRedis内では「 <パッケージ名.ドメイン名>:<キー変数名>:<値> 」という形でキーが登録されます。

 

5. コントローラクラスの作成

表示用のクラスも用意しておきます。

$ grails create-controller Sample

GORMベースに作ると何が便利かと言うと、scaffoldを使えるところです。
簡単に触るだけならばscaffoldで十分です。
作成したコントローラを以下のように変えます。

class SampleController {
    static scaffold = true
}

重要な点は、list()save()なども使えるところです。
また、サービスクラスを用意して、そこでwithTransaction()関数を設定することもできます。

 

補足

私の環境では、上記サンプルでRedisに登録した値はsetとして扱われました。
登録する内容あるいはドメイン設定によってはlistやhashなどで登録できると思います。

 

参考URL

Redis GORM – Reference Documentation
サンプルコード(GitHub)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

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