ぽかぽかウンティの自由帳

ぽかぽか動物園から投稿します。

Ruby用RedisクライアントGem(redis-rb)をRedis Cluster対応させたい

啖呵を切ったものの1社目の書類選考に落ちて凹んでる者です。そんなことよりこの プルリク の件である。(取り込まれたとは言っていない)

Redis ClusterはRedis公式の水平分割機能でゆううき神の 記事 でも言及されている。 ElastiCache にも使われているみたいだ。

Redis Clusterの詳細な仕様は こちら (読んだとは言っていない)

長い間Rubyの代表的なRedisクライアントソフトである redis-rb はRedis Clusterに対応していなかった。

Redis生みの親のサルバトーレ神の リファレンス実装 があるからみんなそれを使っているのかもしれない。しかしリファレンス実装なためかGem化されておらず、Railsアプリケーションとかだとvendorディレクトリ配下とかに直接配置せねばならず、いまいち本番環境で使うのに躊躇してしまうこともあるだろう。

Redis Clusterへの対応、とは主にリダイレクションに関してだ。Redis Clusterは SETGET などで指定されたキーからスロットと呼ばれる値を算出して格納するノードを確定してデータを分散させている。Redis Clusterのクライアントは基本的にどのノードにもアクセスしてOKだが、例えばノードAに格納されているキー1をノードBにアクセスして GET しようとすると、その返事は「ノードAから取得してね」という具合で、クライアントソフトにリダイレクト処理を要求する。最低限そこだけ実装できれば正常に動いているRedis Clusterを扱えるようになる。

redis-rb はスター数も少なくはないのに、なぜ今まで放置されていたのだろう。意外なところに穴場があったものだ。 プルリク が取り込まれたらうれしいな。