LoginSignup
64
52

More than 5 years have passed since last update.

redis入門&応用編

Posted at

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の高い順)

64
52
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
64
52