[Jedis] ZRANGE WITHSCORES

RedisのZSETに受信データを蓄積していくプログラムを書いた。
ZSETのScoreに受信日時(1970/01/01からのミリ秒)をセットしていて、日付を指定して受信データを抜き出せる設計にした。

で、テストするときに「最も過去のデータがいつ受信したのか知りたいなー」と思って調査。

Redisだと以下の方法で memberとscore を取得できる。

> ZRANGE key 0 0 WITHSCORES

日本語ドキュメントだと

値だけではなくて要素のスコアを返せるように WITHSCORES オプションを与えることもできます。Redisはデータをvalue1,score1,value2,score2,…,valueN,scoreNというリストの形で返します。しかしクライアントライブラリはデータをより適切な形で返すことも可能です。(このコマンドで一番良い形なのは2要素のタプルの配列だと思います)

ってあって、「Javaにタプルねーしなー、どうすっべかなー」と思ってたら redis.clients.jedis.Tuple ってクラスがあった。

Jedisだと以下のように実装できる。

Set<Tuple> result = jedis.zrangeWithScores(key, 0, 0);
for (Tuple item : result) {
    return item.getScore();
}

ふむ。簡単。

別に汎用的に使えるタプルのクラス、って訳ではなく、あくまでRedisのscoreとmemberを一緒に返す時に使うクラスってだけなので、Tuple って名称は微妙だな。

参考

コメント

このブログの人気の投稿

Classpath entry org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER is marked for publish/export but is not exported on the project classpath

蛍光灯フリッカー現象 (ちらつき) の対策

[node.js] CP932のテキストを読み込む