LoginSignup
28
23

More than 5 years have passed since last update.

データ量が多くなった時のredisのkeyの探り方

Last updated at Posted at 2014-07-25

概要

redisをproductionで使ってて、データ量が多くなってきたときのkeyのアクセスの仕方について
全てのkeyに
http://redis.io/commands/expire
設定しとけば、いいんですが、できない場合とかやってなかった場合とかでデータ量増えた状態で
特定のkeyの中身を見たいとき

keyを特定する

keys

全件 *

これで検索すると、多分、出力が返ってこないので、データが多い時はやめましょう

keys *

特定のkey

keyが全部わからないけども、途中までわかってて、keysする
データの容量にもよりますが、出力の結果は数秒して返ってきますが、redisで数秒待つとか...

@は変数

keys "@アクション名:@id:@イベント名:*"

ということで、データの容量が多い時はkeys使うのはやめましょう。

計算量を気にする

keysを使うのをやめるという理由に計算量があります。

計算量

No. アルゴリズム 説明
1 O(1) 計算時間がO(1)のアルゴリズムは、処理が入力の量によらない場合です。
2 O(log n) 計算時間がO(log n)になるアルゴリズムは、処理をひとつ行うたびに入力を何割か減らせるようなアルゴリズムです。入力が増えても計算時間がほとんど増えません。
3 O(n) 計算時間がO(n)になるアルゴリズムは、入力の量だけ時間がかかるアルゴリズムです
4 O(n log n) 計算時間がO(n log n)になるアルゴリズムは、そのほとんどがソートを前処理として行います。
5 O(n^2) 計算時間がO(n^2)になるアルゴリズムは、要素からすべての組み合わせのペアについて調べるようなアルゴリズムです。
6 O(2^n) 計算時間がO(2 ^ n)になるアルゴリズムは、要素を取り出すときのすべての組み合わせについて調べるようなアルゴリズムです。
7 O(n!) 計算時間がO(n!)になるアルゴリズムは、要素の順番のすべての組み合わせを調べるようなアルゴリズムです。

例えば

http://redis.io/commands/keys
O(N)
入力の量(データ量)だけ時間がかかるアルゴリズムです。

じゃあ、どうするのか

僕の場合ですが、typeしてます

type

http://redis.io/commands/type
O(1)
どんなにデータが増えても時間は変わらない

でも、プログラムを見るなりして、keyはわかってる必要があります。

type "hoge_action:478348:hoge_event"

なければ、 none が返ってきます。

typeが分かってからの値の全取得方法

string

get $redis_key

hash

hgetall $redis_key

fieldまでわかるなら
http://redis.io/commands/hget

list

lrange $redis_key 0 -1

set

smembers $redis_key

sorted_set (zset)

zrange $redis_key 0 -1
28
23
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
28
23