rubyでredisにハッシュを突っ込む時のお勉強ノート


Ruby redis

KVS型のDBとして有名なRedisを使ってみたかったのですが、ハッシュ関連のデータをどうやったらうまい具合に保存できるかな。。 と調べて色々試したら、結構ユニークな概念だったので絶対そのうち忘れると思いメモ。


Redis 300dpi

ハッシュ型の概念

正確にはハッシュって言ってはいけないのかな・・データ部の中身がハッシュという事を言いたいんだが・・ どうなんだろう(´エ`;)
KeyとValueをデータ部に保存するんですが、こんな中身の構造でした。

key => field1, value1, field2, value2, field3, value3, …

つまり、ハッシュデータを一つのKeyの中身として保存できるけど、ハッシュのKeyとValueはフィールドで交互に区切られているだけ。
けど、ちょうど作ってるアプリがこんな感じでひとまとまりのデータを保存できたらイイわー って思ってましたのでこれを採用しますた。

なお、Redis-clientってクッソたくさんのコマンド(?)メソッド(?)があるじゃないですか。 保存したHashのKey全部よこしてちょーだい っていう場合どうするのか分からなくて最初困った。
正解) keys *

結構単純だったwww

その他よく使いそうなコマンドメモ

keyの中の全てのFieldsとValuesを取得したい

hgetall #{key}

127.0.0.1:6379> hgetall hoge
1) "2015-01-26:20"
2) "4"
3) "2015-01-26:20:50"
4) "5"
5) "2015-01-26:20:51"
6) "46"
7) "2015-01-26:20:52"
8) "3"

なんなんだよ、このデータは・・ ってツッコミは無しの方向でお願いします。

Redisに突っ込んだデータを全部消す(Trancate的なノリ)

flushdb

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> keys *
(empty list or set)

Keyにマルチバイトを突っ込んだらRedisクライアントで表示した時に文字化けしてしまったんですが。。

クライアント起動時に
$ redis-cli –raw
と、オプションをつけたら治りました。

127.0.0.1:6379> keys *
1) "\xe3\x82\x8f\xe3\x83\xbc\xe3\x83\xbc\xe3\x83\xbc\xe3\x83\xbc\xe3\x82\xb8\xe3\x83\xa3\xe3\x83\x8b\xe3\x82\xaa\xe3\x82\xbf\xe3\x81\x95\xe3\x82\x93\xe3\x81\xa8\xe7\xb9\x8b\xe3\x81\x8c\xe3\x82\x8b\xe3\x81\x8a\xe6\x99\x82\xe9\x96\x93\xe3\x81\x8c\xe3\x81\xbe\xe3\x81\x84\xe3\x82\x8a\xe3\x81\xbe\xe3\x81\x97\xe3\x81\x9f\xe3\x81\xaa\xe3\x81\xae\xe3\x81\xa7\xe3\x81\x84\xe3\x81\xa3\xe3\x81\xb1\xe3\x81\x84\xe7\xb9\x8b\xe3\x81\x8c\xe3\x82\x8a\xe3\x81\xbe\xe3\x81\x97\xe3\x82\x87"
2) "755\xe3\x82\xa2\xe3\x83\x97\xe3\x83\xaa"

こんなんが連発されていたのですが、 –raw してみたら。。

127.0.0.1:6379> keys *
#わーーーージャニオタさんと繋がるお時間がまいりましたなのでいっぱい繋がりましょ
#拡散希望

↑こんな中身だった。
このStreamingAPIから取ってくるデータのハッシュタグだけ全部抜いてたんですが、このハッシュタグの量半端無かったです。
ジャニーズ関連のTweetかなりすごい。

なお、rubyでRedisに保存&読み込みをしている際はマルチバイト文字も何も言わないで勝手にやってくれてた(文字化けしないですんだ)

余談

よく、Keyの中身を確認したいとき、なんとなく
> get key
とやってしまうんですが、フィールド名まで指定していないと

(error) ERR wrong number of arguments for ‘hget’ command

と、怒られますね。
fieldを指定して、
> get key filed
とするとValueがちゃんと出てきてくれる。 

あーーー 後背筋がパンパンだぁあああ

2015-02-11 | Posted in RubyNo Comments » 


関連記事

Comment





Comment



*