redis-03-データ型

14982 ワード

宣言
この文章には技術的な含有量はありません.後で確認するために、本人の命令練習記録だけです.
[TOC]
1 redisベースコマンド
基本データ型を見る前に、redisのkeyに関する知識点を見てみましょう.
1.1 keys
127.0.0.1:6379> keys *
1) "counter:__rand_int__"
2) "mylist"
3) "key:__rand_int__"
4) "k1"

1.2 exists
あるキーが存在するかどうかを判断する
127.0.0.1:6379> EXISTS k1
(integer) 1 # 1    
127.0.0.1:6379> EXISTS k11
(integer) 0 # 0     

1.3 move
キーを指定し、指定したDBにデータを移動します.
move key db-index
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> set k2 v2
OK
127.0.0.1:6379> keys *
1) "k2"
2) "k1"
127.0.0.1:6379> MOVE k1 6 #  k1   6  
(integer) 1
127.0.0.1:6379> keys *
1) "k2"
127.0.0.1:6379> SELECT 6
OK
127.0.0.1:6379[6]> keys *
1) "k1"

1.4 expire
指定key生存時間を設定し、key期限切れ(生存時間0)の場合、自動的に削除されます.
expire key seconds
127.0.0.1:6379[6]> set k1 v1
OK
127.0.0.1:6379[6]> set k2 v2
OK
127.0.0.1:6379[6]> EXPIRE k1 10 # 10   ,k1   
(integer) 1

1.5 ttl
キーの残りの有効期限を返します.
  • Redis 2.6以降
  • keyが存在しない、または期限切れの場合は戻る-1.
  • Redis 2より.8スタート
  • keyが存在しないか期限切れの場合は戻る-2
  • keyに有効期限が設定されていない場合(永久有効)、戻る-1.

  • 1.6 type
    戻りkey格納されているvalueのデータ構造タイプ、例えばstringlistsetzsethashとは異なるタイプ.
    2 redis-ビッグ5データ型-概要
  • string

  • stringには、他の言語の文字列の特性があります.stringタイプはRedisの最も基本的なデータ型であり、1つのredisの文字列valueは最大512 Mであることができる.
    stringタイプはバイナリで安全です.redisのstringは任意のデータを含むことができるという意味です.例えばjpgピクチャやシーケンス化されたオブジェクト.
  • list

  • listは文字列リストで、挿入順に並べ替えられます.
  • hash

  • 私の第一映像はJavaのMapです.似ていますが、違います.
  • set

  • JavaのSetと同様、無秩序な文字列の集合です.
  • zset

  • setとの違いは、zsetの各要素にdoubleタイプのscoreが関連付けられていることです.
    3 string
    3.1 set/get/append/strlen/del
    127.0.0.1:6379[6]> FLUSHALL
    OK
    127.0.0.1:6379[6]> set k1 a
    OK
    127.0.0.1:6379[6]> get k1 #  k1    "a"
    "a"
    127.0.0.1:6379[6]> APPEND k1 bcd #  k1  "bcd"
    (integer) 4
    127.0.0.1:6379[6]> get k1
    "abcd"
    127.0.0.1:6379[6]> STRLEN k1 #     
    (integer) 4
    127.0.0.1:6379[6]> DEL k1
    (integer) 1
    127.0.0.1:6379[6]> keys *
    (empty list or set)
    

    3.2 incr/incrby/decr/decrby
    127.0.0.1:6379[6]> FLUSHALL
    OK
    127.0.0.1:6379[6]> set k1 1
    OK
    127.0.0.1:6379[6]> get k1
    "1"
    127.0.0.1:6379[6]> INCR k1
    (integer) 2
    127.0.0.1:6379[6]> INCR k1
    (integer) 3
    127.0.0.1:6379[6]> INCRBY k1 5 #           5
    (integer) 8
    127.0.0.1:6379[6]> INCRBY k1 5 #           3
    (integer) 13
    127.0.0.1:6379[6]> DECR k1
    (integer) 12
    127.0.0.1:6379[6]> DECRBY k1 3
    (integer) 9
    127.0.0.1:6379[6]>
    

    3.3 getrange/setrange
  • getrange key start end
  • 子列を取るための命令
  • startとendの値とPythonのうち 類似
  • setrange key offset value
  • 指定されたoffsetからvalueを覆う長さ
  • もしoffset>strlen(key)であればkey対応する値後補offset-strlen(key) 後に引き続き追加key
  • 存在しないkeyと思われる
  • offset最大2^29-1(536870911)
  • 127.0.0.1:6379[6]> set k "abcdefgh"
    OK
    127.0.0.1:6379[6]> SETRANGE k 1 "x"
    (integer) 8
    127.0.0.1:6379[6]> get k
    "axcdefgh"
    127.0.0.1:6379[6]> SETRANGE k 1 "yy"
    (integer) 8
    127.0.0.1:6379[6]> get k
    "ayydefgh"
    127.0.0.1:6379[6]> SETRANGE k 1 "yyyyyyyyyy"
    (integer) 11
    127.0.0.1:6379[6]> get k
    "ayyyyyyyyyy"
    127.0.0.1:6379[6]> setrange k 15 "123x"
    (integer) 19
    127.0.0.1:6379[6]> get k
    "ayyyyyyyyyy\x00\x00\x00\x00123x"
    #    k88     ,        
    127.0.0.1:6379[6]> SETRANGE k88 3 "haha" 
    (integer) 7
    127.0.0.1:6379[6]> get k88
    "\x00\x00\x00haha" #             3  
    127.0.0.1:6379[6]>
    

    3.4 setex/getnx
  • setex(set with expire)
  • setとともにkeyに期限切れを指定
  • setnx(set if not exists)
  • keyが存在しない場合set値
  • return 1 keyがセットされたら
  • return 0 keyがセットされていなければ成功
  • #         8    
    127.0.0.1:6379[6]> SETEX k88 10 "haha"
    OK
    127.0.0.1:6379> SETNX k1 111 #   k1      k1 111
    (integer) 1
    127.0.0.1:6379> get k1
    "111"
    127.0.0.1:6379> SETNX k1 222 # k1    ,    
    (integer) 0
    127.0.0.1:6379> get k1
    "111"
    

    3.5 mset/mget/msetnx
  • mset k1 v1 [k2,v2 ...]
  • mget
  • msetnx k1 v1 [k2,v2 ...]
  • キーが1つあれば失敗
  • return 1、すべてのキーがセットされている
  • return 0、すべてのキーが設定されていない(少なくとも1つのキーは既に存在する)
  • 127.0.0.1:6379> MSET k1 v1 k2 v2 k3 v3
    OK
    127.0.0.1:6379> get k1
    "v1"
    127.0.0.1:6379> MGET k1 k2 k3
    1) "v1"
    2) "v2"
    3) "v3"
    

    4 list
    4.1 lpush/rpush/lrange
    127.0.0.1:6379> LPUSH l1 1 2 3 4 5 6
    (integer) 6
    127.0.0.1:6379> LRANGE l1 0 2
    1) "6"
    2) "5"
    3) "4"
    127.0.0.1:6379> LRANGE l1 0 -1
    1) "6"
    2) "5"
    3) "4"
    4) "3"
    5) "2"
    6) "1"
    127.0.0.1:6379> LSET l1 2 "abc"
    OK
    127.0.0.1:6379> LRANGE l1 0 -1
    1) "6"
    2) "5"
    3) "abc"
    4) "3"
    5) "2"
    6) "1"
    127.0.0.1:6379> 
    

    4.2 lpop/rpop/lindex/llen
  • llen
  • keyが存在しない場合は空リストとみなされ、戻り長さは0
  • keyに格納されている値がリストでなければerrorを返します
  • 127.0.0.1:6379> LPUSH l1 1 2 3 4 5
    (integer) 5
    127.0.0.1:6379> LPOP l1
    "5"
    127.0.0.1:6379> RPOP l1
    "1"
    127.0.0.1:6379> LRANGE l1 0 -1
    1) "4"
    2) "3"
    3) "2"
    
    127.0.0.1:6379> RPUSH l2 1 2 3 4 5
    (integer) 5
    127.0.0.1:6379> LPOP l2
    "1"
    127.0.0.1:6379> RPOP l2
    "5"
    127.0.0.1:6379> LRANGE l2 0 -1
    1) "2"
    2) "3"
    3) "4"
    
    127.0.0.1:6379> RPUSH l3 1 2 3 4
    (integer) 4
    127.0.0.1:6379> LINDEX l3 0
    "1"
    127.0.0.1:6379> LINDEX l3 2
    "3"
    
    127.0.0.1:6379> LLEN l3
    (integer) 4
    

    4.3 lrem/ltrim
  • lrem key count value
  • count>0:count個の値がvalueの要素を最初から最後まで除去
  • count<0:count個の値がvalueの要素を末尾から除去
  • count=0:valueのすべての値を持つ要素を削除
  • ltrim key start end
  • 127.0.0.1:6379> RPUSH l1 a b c a c d e a d a
    (integer) 10
    127.0.0.1:6379> LRANGE l1 0 -1
     1) "a"
     2) "b"
     3) "c"
     4) "a"
     5) "c"
     6) "d"
     7) "e"
     8) "a"
     9) "d"
    10) "a"
    #           a   
    127.0.0.1:6379> LREM l1 2 a
    (integer) 2
    127.0.0.1:6379> LRANGE l1 0 -1
    1) "b"
    2) "c"
    3) "c"
    4) "d"
    5) "e"
    6) "a"
    7) "d"
    8) "a"
    
    #           d   
    127.0.0.1:6379> LREM l1 -1 d
    (integer) 1
    127.0.0.1:6379> LRANGE l1 0 -1
    1) "b"
    2) "c"
    3) "c"
    4) "d"
    5) "e"
    6) "a"
    7) "a"
    
    #       c   
    127.0.0.1:6379> LREM l1 0 c
    (integer) 2
    127.0.0.1:6379> LRANGE l1 0 -1
    1) "b"
    2) "d"
    3) "e"
    4) "a"
    5) "a"
    
    
    127.0.0.1:6379> RPUSH l2 a b c d a c e
    (integer) 7
    #       2-4   
    127.0.0.1:6379> LTRIM l2 2 4
    OK
    127.0.0.1:6379> LRANGE l2 0 -1
    1) "c"
    2) "d"
    3) "a"
    127.0.0.1:6379>  
    

    4.4 rpoplpush
    127.0.0.1:6379> RPUSH l1 1 2 3
    (integer) 3
    127.0.0.1:6379> RPUSH l2 a b c
    (integer) 3
    127.0.0.1:6379> RPOPLPUSH l1 l2
    "3"
    127.0.0.1:6379> LRANGE l1 0 -1
    1) "1"
    2) "2"
    127.0.0.1:6379> LRANGE l2 0 -1
    1) "3"
    2) "a"
    3) "b"
    4) "c"
    

    4.5 linsert
    127.0.0.1:6379> RPUSH l1 1 2 3
    (integer) 3
    #  l1    3      
    127.0.0.1:6379> LINSERT l1 before 3 "newVal"
    (integer) 4
    127.0.0.1:6379> LRANGE l1 0 -1
    1) "1"
    2) "2"
    3) "newVal"
    4) "3"
    #  l1    "newVal"      
    127.0.0.1:6379> LINSERT l1 after "newVal" "anotherNewVal"
    (integer) 5
    127.0.0.1:6379> LRANGE l1 0 -1
    1) "1"
    2) "2"
    3) "newVal"
    4) "anotherNewVal"
    5) "3"
    #    "ha"       
    127.0.0.1:6379> LINSERT l1 after "ha" "o..."
    # "ha"   ,  -1
    (integer) -1
    127.0.0.1:6379> LRANGE l1 0 -1
    1) "1"
    2) "2"
    3) "newVal"
    4) "anotherNewVal"
    5) "3"
    127.0.0.1:6379>  
    

    5 set
    5.1 sadd/smembers/sismember/srem/scard
    127.0.0.1:6379> SADD s1 1 2 3 1 2 3 1
    (integer) 3
    127.0.0.1:6379> SMEMBERS s1
    1) "1"
    2) "2"
    3) "3"
    127.0.0.1:6379> SISMEMBER s1 2 # contains
    (integer) 1
    127.0.0.1:6379> SISMEMBER s1 111
    (integer) 0
    
    127.0.0.1:6379> SCARD s1 # count
    (integer) 3
    127.0.0.1:6379> SREM s1 2 # del
    (integer) 1
    127.0.0.1:6379> SMEMBERS s1
    1) "1"
    2) "3"
    

    5.2 srandmember/spop
    127.0.0.1:6379> SADD s2 0 1 2 3 4 5 6 7 8 9
    (integer) 10
    # srandmember       
    127.0.0.1:6379> SRANDMEMBER s2 3 #         
    1) "8"
    2) "7"
    3) "6"
    127.0.0.1:6379> SRANDMEMBER s2 3
    1) "8"
    2) "2"
    3) "4"
    127.0.0.1:6379> SRANDMEMBER s2 3
    1) "2"
    2) "7"
    3) "4"
    
    # spop     
    127.0.0.1:6379> spop s2 2
    1) "2"
    2) "7"
    127.0.0.1:6379> spop s2 2
    1) "5"
    2) "9"
    127.0.0.1:6379> spop s2 2
    1) "8"
    2) "4"
    127.0.0.1:6379> SMEMBERS s2
    1) "0"
    2) "1"
    3) "3"
    4) "6"
    

    5.3 smove
    127.0.0.1:6379> sadd s1 1 2 3
    (integer) 3
    127.0.0.1:6379> SADD s2 a b c
    (integer) 3
    #  s1    2        s2 
    127.0.0.1:6379> SMOVE s1 s2 2
    (integer) 1 # return 1 ==>   
    127.0.0.1:6379> SMEMBERS s1
    1) "1"
    2) "3"
    127.0.0.1:6379> SMEMBERS s2
    1) "2"
    2) "c"
    3) "b"
    4) "a"
    127.0.0.1:6379> SMOVE s1 s2 -1
    (integer) 0 # return 0 ==>     
    127.0.0.1:6379>  
    

    5.4数学集合操作
    127.0.0.1:6379> SADD s1 1 2 3
    (integer) 3
    127.0.0.1:6379> SADD s2 2 3 a b
    (integer) 4
    127.0.0.1:6379> SINTER s2 s1 #   
    1) "2"
    2) "3"
    127.0.0.1:6379> SUNION s1 s2 #   
    1) "3"
    2) "2"
    3) "b"
    4) "1"
    5) "a"
    127.0.0.1:6379> SDIFF s1 s2 #   
    1) "1"
    127.0.0.1:6379> SDIFF s2 s1 #   
    1) "a"
    2) "b"
    127.0.0.1:6379>  
    

    6 hash
    6.1 hget/hset/hmset/hmget/hgetall
    127.0.0.1:6379> HSET user id 1
    (integer) 1
    127.0.0.1:6379> HSET user name "tom"
    (integer) 1
    127.0.0.1:6379> HGET user id
    "1"
    127.0.0.1:6379> HGET user name
    "tom"
    # set user.name="apache",user.age=24,user.sex="male"
    127.0.0.1:6379> HMSET user name "apache" age 24 sex "male"
    OK
    127.0.0.1:6379> HGET user age
    "24"
    
    # get user.id,user.name,user.age,user.sex
    127.0.0.1:6379> HMGET user id name age sex 
    1) "1"
    2) "apache"
    3) "24"
    4) "male"
    
    127.0.0.1:6379> HGETALL user
    1) "id"
    2) "1"
    3) "name"
    4) "apache"
    5) "age"
    6) "24"
    7) "sex"
    8) "male"
    127.0.0.1:6379>  
    

    6.2 hlen/hdel/hkeys/hvals
    127.0.0.1:6379> HDEL user age sex # del user.age ,del user.sex
    (integer) 2
    127.0.0.1:6379> HGETALL user
    1) "id"
    2) "1"
    3) "name"
    4) "apache"
    127.0.0.1:6379> HLEN user
    (integer) 2
    # user.keySet()
    127.0.0.1:6379> HKEYS user
    1) "id"
    2) "name"
    # user.values()
    127.0.0.1:6379> HVALS user
    1) "1"
    2) "apache"
    127.0.0.1:6379>  
    

    6.3 hincrby/hIncrByFloat
    127.0.0.1:6379> HSET u age 1
    (integer) 1
    127.0.0.1:6379> HINCRBY u age 1 # u.age++
    (integer) 2
    127.0.0.1:6379> HINCRBY u age 1 # u.age++
    (integer) 3
    127.0.0.1:6379> HINCRBY u age 1 # u.age++
    (integer) 4
    127.0.0.1:6379> HGET u age
    "4"
    127.0.0.1:6379> HINCRBY u age 10 # u.age += 10
    (integer) 14
    127.0.0.1:6379> HGET u age
    "14"
    127.0.0.1:6379> HINCRBY u age -2 # u.age -= 2
    (integer) 12
    
    127.0.0.1:6379> HINCRBYFLOAT u age 1.2 # u.age += 1.2
    "13.2"
    127.0.0.1:6379> HINCRBYFLOAT u age 1.5 # u.age += 1.5
    "14.7"
    127.0.0.1:6379> HINCRBYFLOAT u age -1.5 # u.age -= 1.5
    "13.2"
    127.0.0.1:6379>  
    

    6.4 hsetnx
    127.0.0.1:6379> FLUSHALL
    OK
    127.0.0.1:6379> HSET user id 1
    (integer) 1
    127.0.0.1:6379> HSETNX user name "tom" #    ,    
    (integer) 1
    127.0.0.1:6379> HSETNX user name "tom" #   ,   
    (integer) 0
    127.0.0.1:6379>  
    

    7 zset
    7.1 zadd/zrange
    127.0.0.1:6379> ZADD z1 1 v1 2 v2 3 v3
    (integer) 3
    127.0.0.1:6379> ZRANGE z1 0 -1
    1) "v1"
    2) "v2"
    3) "v3"
    127.0.0.1:6379> ZRANGE z1 0 -1 withscores
    1) "v1"
    2) "1"
    3) "v2"
    4) "2"
    5) "v3"
    6) "3"
    127.0.0.1:6379>  
    

    7.2 zRangeByScore
    # 1 <= score <= 2
    127.0.0.1:6379> ZRANGEBYSCORE z1 1 2
    1) "v1"
    2) "v2"
    # 1 <= score <= 2     score
    127.0.0.1:6379> ZRANGEBYSCORE z1 1 2 withscores
    1) "v1"
    2) "1"
    3) "v2"
    4) "2"
    # 1 <= score < 2 
    127.0.0.1:6379> ZRANGEBYSCORE z1 1 (2
    1) "v1"
    # 1 <= score < 2     score
    127.0.0.1:6379> ZRANGEBYSCORE z1 1 (2 withscores
    1) "v1"
    2) "1"
    
    #       v4,v5
    127.0.0.1:6379> ZADD z1 4 v4 5 v5
    (integer) 2
    127.0.0.1:6379> ZRANGE z1 0 -1
    1) "v1"
    2) "v2"
    3) "v3"
    4) "v4"
    5) "v5"
    # 2 <= score <= 4
    127.0.0.1:6379> ZRANGEBYSCORE z1 2 4
    1) "v2"
    2) "v3"
    3) "v4"
    
    #    limit MySQL  
    127.0.0.1:6379> ZRANGEBYSCORE z1 2 4 limit 2 1
    1) "v4"
    127.0.0.1:6379> ZRANGEBYSCORE z1 2 4 limit 0 1
    1) "v2"
    127.0.0.1:6379>  
    

    7.3 zrem/zcard/zcount
    127.0.0.1:6379> ZADD z2 1 v1 2 v2 3 v3
    (integer) 3
    127.0.0.1:6379> ZCARD z2 # size of z2
    (integer) 3
    127.0.0.1:6379> ZREM z2 v2 v3 # del v2,v3
    (integer) 2
    127.0.0.1:6379> ZRANGE z2 0 -1
    1) "v1"
    
    # 1 <= score <=5       
    127.0.0.1:6379> ZCOUNT z2 1 5
    (integer) 1
    
    #   v1 score
    127.0.0.1:6379> ZSCORE z2 v1
    "1"
    127.0.0.1:6379>  
    

    参考資料
  • 尚シリコンバレー思惟導図資料
  • http://www.redis.cn/commands.html
  • https://redis.io/commands