Symfoware

Symfowareについての考察blog

Redis 2.4系 hashの値でソートする(sortコマンド)

Redisでソートができるのか調べてみました。

参考にしたのはこちら。

https://redis-docs.readthedocs.org/en/latest/SortCommand.html
http://grokbase.com/t/gg/redis-db/1236403prq/sort-with-hash

簡単には行かないので、この方法は微妙な気がします。



sortコマンド



まず、基本となるのはリストをソートする「sort」コマンド。

saddコマンドを使用し、「sort_key」というキー名で「1」「2」「3」という値を登録しました。


> sadd sort_key 1
> sadd sort_key 2
> sadd sort_key 3



sort sort_keyで、登録した値を並び替えます。


> sort sort_key
1) "1"
2) "2"
3) "3"




逆順はdescをつけます。


> sort sort_key desc
1) "3"
2) "2"
3) "1"




まず、これが基本の考え方。





データの登録



hsetコマンドで、ハッシュ形式のデータを登録します。

キーが
「data:[num]」

フィールド名、値が2つ。
「field_a」「field_a_[num]_value」
「field_b」「field_b_[num]_value」


[num]は、sort_keyで登録した値に揃えます。


> hmset data:1 field_a field_a_1_value field_b field_b_1_value
> hmset data:2 field_a field_a_2_value field_b field_b_2_value
> hmset data:3 field_a field_a_3_value field_b field_b_3_value




登録したデータはこんな感じ。


> hgetall data:1
1) "field_a"
2) "field_a_1_value"
3) "field_b"
4) "field_b_1_value"

> hgetall data:2
1) "field_a"
2) "field_a_2_value"
3) "field_b"
4) "field_b_2_value"

> hgetall data:3
1) "field_a"
2) "field_a_3_value"
3) "field_b"
4) "field_b_3_value"






並び替えて結果を取得



こんな感じで、並び替えた値が取得出来ました。


> sort sort_key get data:*->field_a
1) "field_a_1_value"
2) "field_a_2_value"
3) "field_a_3_value"

> sort sort_key get data:*->field_a desc
1) "field_a_3_value"
2) "field_a_2_value"
3) "field_a_1_value"

> sort sort_key get data:*->field_b desc
1) "field_b_3_value"
2) "field_b_2_value"
3) "field_b_1_value"

> sort sort_key get data:*->field_b
1) "field_b_1_value"
2) "field_b_2_value"
3) "field_b_3_value"




どうも、予めキー名にマッチするリストを準備しておかないといけないようです。
関連記事

テーマ:データベース - ジャンル:コンピュータ

  1. 2014/07/31(木) 22:46:28|
  2. Redis
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<Redisでluaスクリプトを実行する(redis-py使用) | ホーム | RedisにPythonで画像データを登録する(redis-py使用)>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/1443-dcb4b8b4
この記事にトラックバックする(FC2ブログユーザー)