LoginSignup
3
2

More than 5 years have passed since last update.

Redisをhash形式にすると容量軽くなるっていうけどどうもよくわからない

Last updated at Posted at 2017-12-07

すみません有用な結論はないです。
検証した結果よくわからなかったということで、いったんここで打ち切りがてらメモ。
内容はしょって書いてありますが検証コードと結果をあげたgithubのリンクを最後にはりつけてあります。
検証用のコードは主にpythonで書きました。

どういうことかというと

RedisのHash型を活用するとメモリ使用量が激減
https://siguniang.wordpress.com/2013/02/16/hash-reduce-memory-usage-in-redis/

って素敵な記事を読みまして。

hash形式でデータ格納すると、Redisで圧縮かかって必要なメモリ容量めっちゃ減るよ!ってな感じのことが書いてあるじゃないですか。(ナナメ読みしかしてませんごめんなさい)

その差、なんと5倍!

で。

仮説1

前項のことについて

以下のようなデータがあるとして

key1: hogehoge1
key2: hogehoge2
key3: hogehoge3

以下のように個別のキーにしてRedisに格納するよりも

redis-key1: hogehoge1
redis-key2: hogehoge2
redis-key3: hogehoge3

以下のように、1つのキーにhashでまとめてデータつっこんだほうが

redis-hash-key-hoge: {
            hash-key1: hogehoge1
            hash-key2: hogehoge2
            hash-key3: hogehoge3
        }

容量節約できるよ!って話だと思ってたんですよ。

それで検証してみたんですけど。

仮説1の検証結果

そうでもなかった。

検証コードのtest_all.shから実行した結果のresultにありますが、使用しているメモリ容量はさほどかわらない。

仮説2

じゃあ、比較すべきは、これと

redis-hash-key-hoge: {
            hash-key1: hogehoge1
            hash-key2: hogehoge2
            hash-key3: hogehoge3
        }

これ(イメージ)

redis-str-key-hoge: serialize({
            hash-key1: hogehoge1
            hash-key2: hogehoge2
            hash-key3: hogehoge3
        })

かな?って検証してみたんですよ。

仮説2の検証結果

これもそうでもなかった。

検証コードのtest_all2.shから実行した結果のresult2にありますが、使用しているメモリ容量はさほどかわらない。

つまりどういうことだってばよ?

わからん。

  • 仮説に対する検証コードが間違ってる
  • データ件数が多くないと効果が出ない
  • 環境の問題とかバージョンの問題とかいろいろ

などの可能性はありますが、とりあえず疲れたのでいったん中止…

検証につかったコードと結果ファイル

※やたらめったら出してあるデバッグ情報とか無駄な機能とかに、苦労と苦悩のあとを読み取っていただけるととても嬉しい…。

参考URL

検証コードの作成にあたり、以下のURL参考にさせていただきました。ありがとうございます。結果がよくわからないことになったのはただただ自分のせいです。

http://mokicks.hatenablog.com/entry/2017/10/13/024127
https://qiita.com/FGtatsuro/items/92bca91ed665449ab047
http://takuya-1st.hatenablog.jp/entry/2014/08/23/022031
https://qiita.com/kentarosasaki/items/033751ba8b26cc51cf2a
https://siguniang.wordpress.com/2013/02/16/hash-reduce-memory-usage-in-redis/

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2