PlayのRedisプラグインあれこれ

PlayのCache APIのバックエンドにRedisを使えるようにするプラグインがあり、以前はTypesafe社によってメンテされていたのですが、現在はメンテナンスが停止してしまっています。

github.com

このプラグインはバックエンドにJedisとJedisのScalaラッパーであるSedisを使っているのですが、どうやらSedis側に問題があり、壊れたコネクションがプールから除去されないという問題があるようです。

github.com

あまり使ってる人がいなかったのかもしれませんが、割とクリティカルな問題がある状態でメンテナンスが止まってしまっており、上記のイシューで紹介されているフォーク版でもこの問題は解消されていないように見えたので仕方なくフォークして修正することにしました。

ちなみにSedisにこの問題を修正するためのプルリクが出ていますが、Sedisもメンテが止まってしまっているようです。

github.com

SedisはJedisの薄いラッパーでしかなくあまり有難味がないこと、play-redisでもSedisの機能を使っているのはローンパターン的な部分だけだったのでSedisを外して直接Jedisを使うように修正してみました。で、作ってみたのがこちら。

github.com

すでにMaven Centralにも反映されているのでそのまま使えます。いまのところPlay 2.5用のものしかないのですが、Play 2.6にも対応させたいと思っています。(追記:その後Play 2.6にも対応したバージョンもリリースしました。JedisをFutureでラップしただけのものですが非同期APIも利用可能です。)

ちなみに他の選択肢としてrediscalaを使ったPlayプラグインも存在するようです。

github.com

Play 2.6ではCache APIにも非同期処理用のインターフェースが追加されているのですが、Jedisと違ってrediscalaはノンブロッキングなライブラリなのでPlay 2.6でFutureベースのコードを書くならこちらを使うのがいいのかもしれません。