Redis常用數據類型的案例與總結

Redis數據類型

  1. 常見數據類型如下:(參考Http://redisdoc.com/)

    1. String/字符串
    2. Hash/哈希
    3. List/列表
    4. Set/集合
    5. Zset/sorted set有序集合
  2. KEY的操作:(小寫key代表鍵名,小寫db代表數據庫角標,小寫second代表秒數)

    1. KEYS *:查看當前數據庫的所有鍵值,若沒有返回空(empty list or set)
    2. EXISTS key:存在key的值返回1,不存在返回0
    3. MOVE key db:移動key到其他數據庫(db),key不存在返回0,數據庫不存在報錯(error) ERR index out of range
    4. EXPIRE key second:給制定key設置過期時間,key不存在則失敗返回0
    5. TTL key:查看制定key的剩餘時間(-2~正無窮大),永久返回-1,已過期返回-2
  3. String/字符串的操作:單值單value

    1. SET key xxx/GET key/DEL key/APPEND key xxx/STRLEN key:設值(可覆蓋),取值(不存在返回nil),刪除(成功返回1失敗返回0),追加(key存在返回其長度,不存在則相當於新增),求長度(不存在返回0)
    2. INCR key/DECR key/INCRBY key n/DECRBY key n:給指定key+1/-1/+n/-n(若不存在則新增key,且值爲1或n)
    3. GETRANGE key m n/SETRANGE key n xxx:取指定key的[m,n]的值,從0開始,-1代表最後一位。-2代表倒數第二位/將指定key的值從第n爲開始設置爲xxx,會覆蓋回追加
    4. SETEX key second xxx/ SETNX key xxx:(setex:set with expire)設置帶過期時間的值(可覆蓋可新增)/(setnx:set if not exist)先判斷key是否存在,不存在時設值,存在失敗返回0
    5. MSET key1 xxx key2 xxx key3 xxx …/MGET key1 key2 key 3 …/MSETNX key1 xxx key2 xxx key3 xxx… :設置多個key的值/取得多個key的值/設置多個key的值(全部不存在時才設置,否則返回0)
  4. GETSET key xxx:先取值再設置值,若不不存在key則返回nil後設置值

  5. List/列表:單值多value

    1. LPUSH key v1 v2 v3 …/rpush key v1 v2 v3 …/lrange key m n:從左往右添加/從右往左添加/從左往右取值,[m,n]
    2. LPOP key/RPOP key :從左邊出一個值/從右邊出一個值
    3. LINDEX key index:(lindex key index)通過索引獲取列表中角標爲index的元素
    4. LLEN key:獲取指定key的長度
    5. LREM key value :再key中刪N個值相同的value,不夠則全刪,返回刪除的個數
    6. LTRIM key m n:截取指定範圍[m,n]的值後再賦值給這個key,越界則截取[m,n]覆蓋的值
    7. RPOPLPUSH key1 key2:移除key1列表的最後一個元素,並將該元素添加到另一個列表key2(不存在則新建),並返回
    8. LSET key index xxx:將xxx插如key中的index位置,若index越界則報錯(error) ERR index out of range
    9. LINSERT key before/after xxx1 xxx2:將xxx2插入到xxx1的前面/後面,若xxx1不存在則插入失敗返回-1
    10. 總結:List是一個字符串鏈表,left、right都可以插入添加;如果鍵不存在,創建新的鏈表;如果鍵已存在,新增內容;如果值全移除,對應的鍵也就消失了。鏈表的操作無論是頭和尾效率都極高,但是對中間元素進行操作時,效率就很低了。
  6. Hash/哈希KV模式不變,但V是一個鍵值對

    1. HSET hashname key xxx/HGET hashname key/HMSET hashname key1 xx1 key2 x2 …/HMGET hashname key1 key2 …/HGETALL hashname/HDEL hashname

      127.0.0.1:6379> HSET h1 k1 v1
      (integer) 1
      127.0.0.1:6379> HGET h1 k1
      "v1"
      127.0.0.1:6379> HMSET h1 k2 v2 k3 v3 k4 v4
      OK
      127.0.0.1:6379> HMGET h1 k1 k2 k3 k4
      1) "v1"
      2) "v2"
      3) "v3"
      4) "v4"
      127.0.0.1:6379> HGETALL h1
      1) "k1"
      2) "v1"
      3) "k2"
      4) "v2"
      5) "k3"
      6) "v3"
      7) "k4"
      8) "v4"
      127.0.0.1:6379> HDEL h1 k4
      (integer) 1
      127.0.0.1:6379> HGETALL h1
      1) "k1"
      2) "v1"
      3) "k2"
      4) "v2"
      5) "k3"
      6) "v3"
      127.0.0.1:6379> 
      
    2. HLEN hashname:

      127.0.0.1:6379> HGETALL h1
      1) "k1"
      2) "v1"
      3) "k2"
      4) "v2"
      5) "k3"
      6) "v3"
      127.0.0.1:6379> HLEN h1
      (integer) 3
      127.0.0.1:6379> 
      
    3. HEXISTS hashname key:

    127.0.0.1:6379> HEXISTS h1 k1
    (integer) 1
    127.0.0.1:6379> HEXISTS h1 k5
    (integer) 0
    127.0.0.1:6379> HEXISTS h2 k5
    (integer) 0
    127.0.0.1:6379> HEXISTS h2
    (error) ERR wrong number of arguments for 'hexists' command
    127.0.0.1:6379> HEXISTS k1
    (error) ERR wrong number of arguments for 'hexists' command
    
    1. HKEYS hashname/HVALS hashname
    127.0.0.1:6379> HKEYS h1
    1) "k1"
    2) "k2"
    3) "k3"
    127.0.0.1:6379> HVALS h1
    1) "v1"
    2) "v2"
    3) "v3"
    127.0.0.1:6379> 
    
    1. HINCRBY hashname key n/HINCRBYFLOAT hashname key n.m:
    127.0.0.1:6379> hget h1 k4
    "2"
    127.0.0.1:6379> HINCRBY h1 k4
    (error) ERR wrong number of arguments for 'hincrby' command
    127.0.0.1:6379> HINCRBY h1 k4 8
    (integer) 10
    127.0.0.1:6379> HGET h1 k4
    "10"
    127.0.0.1:6379> HINCRBYFLOAT h1 k4 2.5
    "12.5"
    127.0.0.1:6379> HGET h1 k4
    "12.5"
    127.0.0.1:6379>
    
    1. HSETNX hashname key xxx:key不存在賦值,存在則無效

      127.0.0.1:6379> HSETNX h1 k6 20
      (integer) 1
      127.0.0.1:6379> HGET h1 k6
      "20"
      127.0.0.1:6379> HSETNX h1 k6 25
      (integer) 0
      127.0.0.1:6379> HGET h1 k6
      "20"
      127.0.0.1:6379>
      
  7. Set/集合:(單值多value,同List)

    1. SADD key xx1 xx2 …/SMEMBERS key/sismember:
    127.0.0.1:6379> SADD s1 v1 
    (integer) 1
    127.0.0.1:6379> SADD s1 v1 
    (integer) 0
    127.0.0.1:6379> SADD s2 a2 b2 c2
    (integer) 3
    127.0.0.1:6379> SMEMBERS s1
    1) "v1"
    127.0.0.1:6379> SMEMBERS s2
    1) "a2"
    2) "c2"
    3) "b2"
    
    127.0.0.1:6379> SISMEMBER s1 v1
    (integer) 1
    127.0.0.1:6379> SISMEMBER s1 v2
    (integer) 0
    127.0.0.1:6379> SISMEMBER s2 a1
    (integer) 0
    127.0.0.1:6379> SISMEMBER s2 a2
    (integer) 1
    127.0.0.1:6379>
    
    1. SCARD:獲取集合裏面的元素個數

      127.0.0.1:6379> SCARD s1
      (integer) 1
      127.0.0.1:6379> SCARD s2
      (integer) 3
      127.0.0.1:6379>
      
    2. SREM key xxx:刪除集合中元素

    127.0.0.1:6379> SREM s1 v1
    (integer) 1
    127.0.0.1:6379> SREM s1 v1
    (integer) 0
    127.0.0.1:6379> SMEMBERS s1
    (empty list or set)
    127.0.0.1:6379> 
    
    1. SRANDMEMBER key 某個整數(隨機出幾個數)
    127.0.0.1:6379> SRANDMEMBER s2
    "b2"
    127.0.0.1:6379> SRANDMEMBER s2
    "a2"
    127.0.0.1:6379> SRANDMEMBER s2
    "a2"
    127.0.0.1:6379> SRANDMEMBER s2
    "b2"
    127.0.0.1:6379> SRANDMEMBER s2
    "c2"
    127.0.0.1:6379>
    
    1. SPOP key :隨機出棧
    127.0.0.1:6379> SPOP s2
    "a2"
    127.0.0.1:6379> SPOP s2
    "c2"
    127.0.0.1:6379> SPOP s2
    "b2"
    127.0.0.1:6379> SMEMBERS s2
    (empty list or set)
    127.0.0.1:6379>
    
    1. SMOVE key1 key2 xxx:將key1裏的某個值xxx賦給key2
    127.0.0.1:6379> SMEMBERS s1
    1) "v1"
    127.0.0.1:6379> SMEMBERS s2
    1) "v2"
    2) "c2"
    3) "a1"
    4) "b2"
    127.0.0.1:6379> SMOVE s1 s2 v1
    (integer) 1
    127.0.0.1:6379> SMEMBERS s2
    1) "v2"
    2) "c2"
    3) "a1"
    4) "b2"
    5) "v1"
    127.0.0.1:6379> SMEMBERS s1
    (empty list or set)
    
    127.0.0.1:6379> SMEMBERS s1
    (empty list or set)
    127.0.0.1:6379> SMOVE s1 s2 v1
    (integer) 0
    127.0.0.1:6379> sadd s1 v1
    (integer) 1
    127.0.0.1:6379> SMOVE s1 s3 v1
    (integer) 1
    127.0.0.1:6379>
    
    1. 數學集合類:SXXX key1 key2(SDIFF:差集、SINTER:交集、SUNION:並集)

      127.0.0.1:6379> SMEMBERS s1
      1) "v1"
      2) "v2"
      3) "v3"
      127.0.0.1:6379> SMEMBERS s2
      1) "v2"
      2) "c2"
      3) "a1"
      4) "b2"
      5) "v1"
      
      127.0.0.1:6379> SDIFF s1 s2
      1) "v3"
      127.0.0.1:6379> SINTER s1 s2
      1) "v1"
      2) "v2"
      127.0.0.1:6379> SUNION s1 s2
      1) "v3"
      2) "v1"
      3) "v2"
      4) "a1"
      5) "c2"
      6) "b2"
      127.0.0.1:6379> 
      
      
  8. Zset/sorted set有序集合:

    1. ZADD zsetname score1 xx1 score2 xx2 … / ZRANGE zsetname m n / ZRANGE zsetname m n withscores

      127.0.0.1:6379> ZADD z1 60 d 70 c 80 b 90 a
      (integer) 4
      127.0.0.1:6379> ZADD z1 60 d 70 c 80 b 90 a
      (integer) 0
      127.0.0.1:6379> ZRANGE z1 0 -1
      1) "d"
      2) "c"
      3) "b"
      4) "a"
      127.0.0.1:6379> ZRANGE z1 0 -1 withscores
      1) "d"
      2) "60"
      3) "c"
      4) "70"
      5) "b"
      6) "80"
      7) "a"
      8) "90"
      127.0.0.1:6379>
      
    2. ZRANGEBYSCORE :

      1. ZRANGEBYSCORE zsetname m n:查出score爲[m,n]的value
      127.0.0.1:6379> ZRANGEBYSCORE z1 60 80
      1) "d"
      2) "c"
      3) "b"
      127.0.0.1:6379> 
      
      1. ZRANGEBYSCORE zsetname m n withscores:查出score爲[m,n]的value,帶scores
      127.0.0.1:6379> ZRANGEBYSCORE z1 60 80 withscores
      1) "d"
      2) "60"
      3) "c"
      4) "70"
      5) "b"
      6) "80"
      127.0.0.1:6379> 
      
      1. ZRANGEBYSCORE zsetname (m (n:“(”表示開區間
      127.0.0.1:6379> ZRANGEBYSCORE z1 (60 (80 withscores
      1) "c"
      2) "70"
      127.0.0.1:6379> ZRANGEBYSCORE z1 (60 (80 
      1) "c"
      127.0.0.1:6379> ZRANGEBYSCORE z1 (60 80 
      1) "c"
      2) "b"
      127.0.0.1:6379> ZRANGEBYSCORE z1 60 (80 
      1) "d"
      2) "c"
      127.0.0.1:6379>
      
    3. ZRANGEBYSCORE zsetname m n limit index k:limit 作用是返回限制、index是開始下標步、k是幾步

      127.0.0.1:6379> ZRANGEBYSCORE z1  0 100 withscores
       1) "g"
       2) "30"
       3) "f"
       4) "40"
       5) "e"
       6) "50"
       7) "d"
       8) "60"
       9) "c"
      10) "70"
      11) "b"
      12) "80"
      13) "a"
      14) "90"
      127.0.0.1:6379> ZRANGEBYSCORE z1 40 80 limit 1 3
      1) "e"
      2) "d"
      3) "c"
      127.0.0.1:6379>   
      
    4. ZREM zsetname xxx:刪除元素xxx爲score下對應的value值

      127.0.0.1:6379> ZRANGEBYSCORE z1  0 100 withscores
       1) "g"
       2) "30"
       3) "f"
       4) "40"
       5) "e"
       6) "50"
       7) "d"
       8) "60"
       9) "c"
      10) "70"
      11) "b"
      12) "80"
      13) "a"
      14) "90"
      127.0.0.1:6379> ZREM z1 g
      (integer) 1
      127.0.0.1:6379> ZRANGEBYSCORE z1  0 100 withscores
       1) "f"
       2) "40"
       3) "e"
       4) "50"
       5) "d"
       6) "60"
       7) "c"
       8) "70"
       9) "b"
      10) "80"
      11) "a"
      12) "90"
      127.0.0.1:6379>
      
    5. ZCARD zsetname(獲取集合中元素個數)/ZCOUNT zsetname m n (獲取分數[m,n]內元素個數)/ZRANK zsetname xxx(獲取xxx在key中的下標位置)/ ZSCORE zsetname xxx(按照值xxx獲得對應的分數):

      127.0.0.1:6379> ZCARD z1
      (integer) 6
      127.0.0.1:6379> ZCOUNT z1 60 80
      (integer) 3
      127.0.0.1:6379> ZRANK z1 b
      (integer) 4
      127.0.0.1:6379> ZRANK z1 d
      (integer) 2
      127.0.0.1:6379> ZSCORE z1 b
      "80"
      127.0.0.1:6379> ZSCORE z1 80
      (nil)
      127.0.0.1:6379> ZSCORE z1 c
      "70"
      127.0.0.1:6379>
      
    6. ZRANK zsetname xxx / ZREVRANK zsetname xxx:獲得下標值,逆序獲得下標值

      127.0.0.1:6379> ZRANK z1 a
      (integer) 5
      127.0.0.1:6379> ZREVRANK z1 a
      (integer) 0
      127.0.0.1:6379> ZRANK z1 b
      (integer) 4
      127.0.0.1:6379> ZREVRANK z1 b
      (integer) 1
      127.0.0.1:6379>
      
    7. ZREVRANGE zsetname m n / ZREVRANGE zsetname m n withscores:

      127.0.0.1:6379> ZREVRANGE z1 0 -1 
      1) "a"
      2) "b"
      3) "c"
      4) "d"
      5) "e"
      6) "f"
      127.0.0.1:6379> ZREVRANGE z1 0 -1 withscores
       1) "a"
       2) "90"
       3) "b"
       4) "80"
       5) "c"
       6) "70"
       7) "d"
       8) "60"
       9) "e"
      10) "50"
      11) "f"
      12) "40"
      127.0.0.1:6379>
      
    8. ZREVRANGEBYSCORE zsetname m n / ZRANGEBYSCORE zsetname m n / ZREVRANGEBYSCORE zsetname m n withscores:

      127.0.0.1:6379> ZREVRANGEBYSCORE z1 90 60
      1) "a"
      2) "b"
      3) "c"
      4) "d"
      127.0.0.1:6379> ZRANGEBYSCORE z1 60 90
      1) "d"
      2) "c"
      3) "b"
      4) "a"
      127.0.0.1:6379> 
      
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章