More than 3 years have passed since last update.


Redis 入門


まず,Redis よく使うデータ構造は、5種類


  • String

  • Hash

  • List

  • Set

  • Sorted set


下記は、5種類データ属性の性質と応用場面:



  • Stringコマンド:set,get,decr,incr,mget 等。

    redis1.png


    応用場面1:key/valueのキャッシュ用。memcacheみたい。

    $ set [key_name] [value]

    $ mset [key_name_1] [value_1] [key_name_2] [value_2]

    $ get [key_name]

    $ mget [key_name_1] [key_name_2] [key_name_3]



    応用場面2:incrementとして使う、例えば Web ページのヒット数などを保持したい場合

    $ SET mykey "10"

    $ INCR mykey      # return 11.

    $ DECR mykey      # return 10.




  • Hashコマンド:hget,hset,hgetall 等。

     HashはFIELDという要素があり、オブジェクト指向っぽいことができそうです。

    redis2.png



応用場面:ユーザの属性の保存、出力。

例:ユーザの名前と年齢と誕生日であれば

・ユーザ(Key).名前(Field)=Aさん(value)

・ユーザ(Key).年齢(Field)=35(value)

・ユーザ(Key).誕生日(Field)=19700701(value)



  • Listコマンド:lpush,rpush,lpop,rpop,lrange等。
     順番の値の集合。
    redis4.PNG


応用場面:

 1)高頻度の追加、queueとして利用

 2)時系列(追加順)に表示

 3)追加された要素にアクセスが集中

例:Twitterのタイムライン、

  ECサイトの現在購入タイムライン、

  大量アクセスのqueue

$ rpush [key_name] [member]  # リストの末尾に値を追加

$ lpush [key_name] [member]  # リストの先頭に値を追加

$ rpop [key_name]        # リストの末尾の値を削除

$ lpop [key_name]        # リストの先頭の値を削除

$ lrange [key_name] 0 3     # 1番目から4番目まで値を取得

$ lrange [key_name] 0 -1    # 1番目から最後(最後から1番目)までの値を取得

$ lindex [key_name] 2      # 3番目の値を取得

$ lindex [key_name] -1     # 最後の値を取得

$ llen [key]           # 要素の数を取得



  • setコマンド:sadd,spop,smembers,sunion 等。
     値の重複を許さない要素の集合。
    redis5.PNG
    redis6.PNG


応用場面:定番の例として「タグ検索」機能。

例:積の集合 SINTER tag:red tag:blue

$ sadd [key_name] [member] # 値を追加

$ srem [key_name] [member] # 値を削除

$ smembers [key_name] # 値の参照

$ sunion [key_name_1] [key_name_2] # 和集合の取得

$ sdiff [key_name_1] [key_name_2] # 差集合の取得

$ sinter [key_name_1] [key_name_2] # 積集合の取得



  • Sorted Setコマンド:zadd,zrange,zrem,zcard等。
     基本的にSetと同じ、違うのは、sortされているかどうか。詳細でいうと,SET型の各要素に"score”というものが付与され、sortできる。


応用場面:

 1)ランキング(PV数やコメント数順)

$ zadd [key_name] [score] [member] # 値を追加

$ zrem [key_name] [member]   # 値を削除

$ zrange [key_name] 0 3    # scoreの低い順に1番目から4番目の値を取得

$ zrevrange [key_name] 0 3   # scoreの高い順に1番目から4番目の値を取得

$ zrank [key_name] [member]   # scoreの値の順位を取得(scoreの低い順)

$ zrevrank [key_name] [member] # scoreの値の順位を取得(scoreの高い順)