すみません有用な結論はないです。
検証した結果よくわからなかったということで、いったんここで打ち切りがてらメモ。
内容はしょって書いてありますが検証コードと結果をあげた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/