Redisの速度を検証してみよう。

社内で「redisのリスト型は数が多くなると重くなるのか」という議題が上がり、実際に検証してみました。

目次

そもそもRedisとは

メモリで管理するデータベースです。高速ですが、SQLのようにデータをテーブルとしてまとめるのは苦手。

以下の条件で検証します。

要素数の数に応じて追加速度が遅くなるなら、速度は低下するはずですが…

検証結果
0~1000.0028040409088135
100~2000.0028679370880127
200~3000.0027220249176025
300~4000.0028030872344971
400~5000.0024170875549316
……
2900~30000.0027751922607422

多少ばらつきはあるものの、要素数によって速度が落ちる傾向はないようです。今回はLpush、Rpushで試しましたが、そこまで違いはありませんでした。

要素数が多いほど全件参照速度は遅くなるのか。

以下の条件で検証します。

各方法で10回おこない、最速時間で比較します。

検証結果
要素数00.0025110244750977
要素数5000.016954898834229
要素数10000.031013011932373
要素数15000.046410083770752
要素数20000.06744909286499
要素数25000.086562871932983
要素数30000.13561391830444
要素数40000.17251300811768
要素数50000.23781895637512
要素数100000.51502299308777


要素数の数に比例して増えるのではなく、数が増える程、遅延も増えるようです。要素の増やしすぎは危険ですね。

要素数が多いほど、単体参照速度は遅くなるのか

先ほどの例では全件参照するので、その分当然遅くなりますが、では数ある要素の中からインデックスを指定して1つだけ取得する場合はどうでしょうか?

以下の条件で検証します。

検証結果
要素数5000.0033140182495117
要素数10000.002723217010498
要素数15000.0029160976409912
要素数20000.0030660629272461
要素数25000.0031499862670898
要素数30000.0033440589904785
要素数50000.0034210681915283
要素数100000.0043261051177979

要素数に応じて若干負荷が増えていくものの、全件取得に比べると圧倒的に早いことが分かりました。

要素数に応じて、要素数の取得速度は遅くなるのか

要素数の内容を全件取得すると速度が極端に遅くなりましたが、要素数の取得は遅くなるのでしょうか?

以下の条件で検証します。

検証結果
要素数00.0023350715637207
要素数10000.002424955368042
要素数20000.0023620128631592
要素数30000.0023491382598877
要素数50000.0026330947875977
要素数100000.0022468566894531

要素数が増えても、速度はそこまで変わらないようです。

検証結果

今回の検証の結果、リスト型からランダムに値を1回取得する場合、全件参照して取得したデータ配列の中からランダムに選ぶよりも、要素数を取得後、0から要素数の間のランダムな数字を選択し、単体参照する方が圧倒的に速いことが分かりました。

前者の場合、1万件を全件取得の時点で0.515秒かかりますが、後者の場合、要素数を取得(0.002秒)+単体取得(0.0043秒)なので、速度が段違いです。

この記事の著者

I-SEEDブログ編集部のアバター
I-SEEDブログ編集部

システム開発やWeb制作・デザイン、Webマーケティングを強みに持つI-SEEDスタッフが、さまざまなノウハウや最新情報をお届けします。

CONTACT/ お問い合わせ

システム開発やWeb制作・デザイン、Webマーケティングに関するご質問やご相談はこちらから。

お問い合わせする

ESTIMATE/ 料金シミュレーター

Web上で簡単なお見積もりが可能です。シミュレーション結果をもとにお問い合わせいただくことも可能ですので、お気軽にご相談ください。

Web見積もりをする
目次