Redis學習(二)—— 數據類型(2)

一、Set類型redis

    Set和List類似,都能存儲多個字符串,Set中的字符串不能存在相同的元素,而且是無序的bash

    命令SADD,給集合中添加一個或多個成員code

127.0.0.1:6379> sadd se_test member1 member2
(integer) 2
127.0.0.1:6379> smembers se_test
1) "member1"
2) "member2"

    命令SMEMBERS,獲取集合中的全部成員排序

    命令SCARD,獲取集合中成員的個數v8

127.0.0.1:6379> scard se_test
(integer) 2

    命令SDIFF,獲取給的第一個集合和後面全部集合的差集(只有集合a有的值,後面集合都沒有的值)rem

127.0.0.1:6379> sadd se_test1 1 2 key
(integer) 3
127.0.0.1:6379> sadd se_test2 1 3 5
(integer) 3
127.0.0.1:6379> sadd se_test3 2 4 6
(integer) 3
127.0.0.1:6379> sdiff se_test1 se_test2
1) "2"
2) "key"
127.0.0.1:6379> sdiff se_test1 se_test2 se_test3
1) "key"

    命令SDIFFSTORE,獲取給的第一個集合和後面全部集合的差集(只有集合a有的值,後面集合都沒有的值),而且將差集放入另外一個集合字符串

127.0.0.1:6379> sdiffstore se_dest se_test1 se_test2 se_test3
(integer) 1
127.0.0.1:6379> smembers se_dest
1) "key"

    命令SINTER,得到給定集合的交集get

127.0.0.1:6379> smembers se_test1
1) "2"
2) "key"
3) "1"
127.0.0.1:6379> smembers se_test2
1) "1"
2) "3"
3) "5"
127.0.0.1:6379> smembers se_test3
1) "2"
2) "4"
3) "6"
127.0.0.1:6379> sinter se_test1 se_test2 se_test3
(empty list or set)
127.0.0.1:6379> sinter se_test1 se_test2
1) "1"

    命令SINTERSTORE,得到給定集合的交集,並將交集放到另外一個集合hash

127.0.0.1:6379> sadd se_test1 1 2 key
(integer) 3
127.0.0.1:6379> sadd se_test2 1 3 5
(integer) 3
127.0.0.1:6379> sinterstore se_dest se_test1 se_test2
(integer) 1
127.0.0.1:6379> smembers se_dest
1) "1"

    命令SISMEMBER,判斷給的值在不在該集合中it

127.0.0.1:6379> sismember se_test1 1
(integer) 1
127.0.0.1:6379> sismember se_test1 3
(integer) 0

    命令SMOVE,將一個集合的值移動到另外一個集合中

127.0.0.1:6379> smove se_test1 se_test2 key
(integer) 1
127.0.0.1:6379> smembers se_test2
1) "5"
2) "3"
3) "key"
4) "1"
127.0.0.1:6379> smembers se_test1
1) "2"
2) "1"

    命令SPOP,隨機彈出幾個成員

127.0.0.1:6379> spop se_test2 2
1) "5"
2) "1"
127.0.0.1:6379> smembers se_test2
1) "3"
2) "key"

    命令SRANDMEMBER,隨機獲取幾個成員

127.0.0.1:6379> smembers se_test2
1) "5"
2) "3"
3) "1"
4) "key"
5) "4"
127.0.0.1:6379> srandmember se_test2 3
1) "1"
2) "key"
3) "4"
127.0.0.1:6379> srandmember se_test2 3
1) "key"
2) "5"
3) "4"
127.0.0.1:6379> srandmember se_test2 3
1) "1"
2) "5"
3) "4"

    命令SREM,從集合中移除幾個成員

127.0.0.1:6379> srem se_test2 1
(integer) 1
127.0.0.1:6379> smembers se_test2
1) "3"
2) "key"
3) "5"
4) "4"

    命令SUNION,合併集合    

127.0.0.1:6379> smembers se_test2
1) "3"
2) "key"
3) "5"
4) "4"
127.0.0.1:6379> smembers se_test1
1) "2"
2) "1"
3) "3"
127.0.0.1:6379> sunion se_test1 se_test2
1) "3"
2) "key"
3) "1"
4) "2"
5) "4"
6) "5"

    命令SUNIONSTORE,合併集合並添加到另外一個集合中去

127.0.0.1:6379> sunionstore se_test3 se_test1 se_test2
(integer) 6
127.0.0.1:6379> smembers se_test3
1) "3"
2) "key"
3) "1"
4) "2"
5) "4"
6) "5"

    命令SSCAN,集合元素的迭代器

127.0.0.1:6379> smembers se_test3
 1) "6"
 2) "12"
 3) "7"
 4) "2"
 5) "3"
 6) "10"
 7) "5"
 8) "11"
 9) "9"
10) "key"
11) "1"
12) "4"
13) "8"
14) "13"
127.0.0.1:6379> sscan se_test3 0(0表明開始一次新的迭代)
1) "7"(返回7表明尚未迭代完成,返回的count默認爲10,可是可能會返回多與10個)
2)  1) "12"
    2) "7"
    3) "5"
    4) "4"
    5) "3"
    6) "2"
    7) "9"
    8) "6"
    9) "8"
   10) "10"
   11) "key"
   12) "1"
127.0.0.1:6379> sscan se_test3 7
1) "0"(返回0表明迭代完成)
2) 1) "11"
   2) "13"
127.0.0.1:6379> sscan se_test3 0 count 5 (指定count爲5)
1) "6"
2) 1) "12"
   2) "7"
   3) "5"
   4) "4"
   5) "3"
127.0.0.1:6379> sscan se_test3 6 count 5
1) "7"
2) 1) "2"
   2) "9"
   3) "6"
   4) "8"
   5) "10"
   6) "key"
   7) "1"
127.0.0.1:6379> sscan se_test3 7 count 5
1) "0"
2) 1) "11"
   2) "13"
127.0.0.1:6379> sscan se_test3 7 count 5 match 1*(match參數能夠進行值的匹配操做)
1) "0"
2) 1) "11"
   2) "13"

二、Hash類型

redis 的散列能夠存儲多個鍵值對之間的映射。值能夠是字符串也能夠是數字,對數字一樣能夠進行自增自減操做。

    命令HSET,給一個hash的一個字段設置值

127.0.0.1:6379> hset h_test name zhangsan
(integer) 1
127.0.0.1:6379> hget h_test name
"zhangsan"

    命令HDEL,刪除hash中的一個或者多個字段

127.0.0.1:6379> hdel h_test name
(integer) 1
127.0.0.1:6379> hget h_test name
(nil)

    命令HEXISTS,判斷一個hash中有沒有某個字段

127.0.0.1:6379> hexists h_test name
(integer) 0

    命令HMSET,給一個hash設置多個值

127.0.0.1:6379> hmset h_test name zhangsan age 18 sex 1
OK

    命令HMGET,得到一個hash、中的多個字段值

127.0.0.1:6379> hmget h_test name age sex
1) "zhangsan"
2) "18"
3) "1"

    命令HGETALL,得到一個hash中的全部字段和值

127.0.0.1:6379> hgetall h_test
1) "name"
2) "zhangsan"
3) "age"
4) "18"
5) "sex"
6) "1"

    命令HINCRBY,hash中某個字段的值進行自增操做

127.0.0.1:6379> hincrby h_test age 3
(integer) 21
127.0.0.1:6379> hgetall h_test
1) "name"
2) "zhangsan"
3) "age"
4) "21"
5) "sex"
6) "1"

    命令HINCRBYFLOAT,hash中的某個字段增長浮點型值

127.0.0.1:6379> hset h_test score 60.5
(integer) 1
127.0.0.1:6379> hgetall h_test
1) "name"
2) "zhangsan"
3) "age"
4) "21"
5) "sex"
6) "1"
7) "score"
8) "60.5"
127.0.0.1:6379> hincrbyfloat h_test score 12.5
"73"

    命令HKEYS,返回hash中的全部字段

127.0.0.1:6379> hkeys h_test
1) "name"
2) "age"
3) "sex"
4) "score"

    命令HLEN,返回hash中有幾個字段

127.0.0.1:6379> hlen h_test
(integer) 4

    命令HSETNX,若是hash中沒有這個字段,就給這個字段設置值

127.0.0.1:6379> hsetnx h_test age 22
(integer) 0
127.0.0.1:6379> hsetnx h_test address china
(integer) 1

    命令HSTRLEN,得到hash中某個字段值的長度

127.0.0.1:6379> hstrlen h_test address
(integer) 5

    命令HVALS,得到hash中的全部值

127.0.0.1:6379> hvals h_test
1) "zhangsan"
2) "21"
3) "1"
4) "73"
5) "china"

    命令HSCAN,hash類型的遊標迭代器

127.0.0.1:6379> hscan h_test 0
1) "0"
2)  1) "name"
    2) "zhangsan"
    3) "age"
    4) "21"
    5) "sex"
    6) "1"
    7) "score"
    8) "73"
    9) "address"
   10) "china"
   11) "f1"
   12) "v1"
   13) "f2"
   14) "v2"
   15) "f3"
   16) "v3"
   17) "f4"
   18) "v4"
   19) "f5"
   20) "v5"
   21) "f6"
   22) "v6"
   23) "f7"
   24) "v7"
   25) "f8"
   26) "v8"
   27) "f9"
   28) "v9"
   29) "f10"
   30) "v10"
   31) "f11"
   32) "v11"
   33) "f12"
   34) "v12"
   35) "f13"
   36) "v13"
   37) "f14"
   38) "v14"
   39) "f15"
   40) "v15"
   41) "f16"
   42) "v16"
   43) "f17"
   44) "v17"
   45) "f18"
   46) "v18"
   47) "f19"
   48) "v19"
   49) "f20"
   50) "v20"
127.0.0.1:6379> hscan h_test 0 count 3 match f*
1) "0"
2)  1) "f1"
    2) "v1"
    3) "f2"
    4) "v2"
    5) "f3"
    6) "v3"
    7) "f4"
    8) "v4"
    9) "f5"
   10) "v5"
   11) "f6"
   12) "v6"
   13) "f7"
   14) "v7"
   15) "f8"
   16) "v8"
   17) "f9"
   18) "v9"
   19) "f10"
   20) "v10"
   21) "f11"
   22) "v11"
   23) "f12"
   24) "v12"
   25) "f13"
   26) "v13"
   27) "f14"
   28) "v14"
   29) "f15"
   30) "v15"
   31) "f16"
   32) "v16"
   33) "f17"
   34) "v17"
   35) "f18"
   36) "v18"
   37) "f19"
   38) "v19"
   39) "f20"
   40) "v20"

三、ZSET類型

有序集合的鍵被稱爲成員,每一個成員都是不相同的,有序集合的值被稱爲分值,分值必須爲浮點數。有序集合是redis裏面惟一一個既能夠根據成員訪問元素,又能夠根據分值以及分值的排列順序來訪問元素的結構。

    命令ZADD,爲zset增長一個或者多個成員,或者若是分數以及存在了就進行更新操做

127.0.0.1:6379> zadd z_test 10 m1 20 m2 15 m3
(integer) 3
127.0.0.1:6379> zadd z_test nx 10 m5(nx,若是存就不進行增長,永遠會增長元素)
(integer) 1
127.0.0.1:6379> zadd z_test nx 11 m5
(integer) 0
127.0.0.1:6379> zadd z_test xx 21 m5(xx,只在元素已經存在的狀況下進行修改,永遠不會新增元素)
(integer) 0
127.0.0.1:6379> zrange z_test 0 -1 withscores
 1) "m1"
 2) "10"
 3) "m4"
 4) "12"
 5) "m3"
 6) "15"
 7) "m2"
 8) "20"
 9) "m5"
10) "21"
127.0.0.1:6379> zadd z_test incr 21 m5(給m5增長21分值)
"42"
127.0.0.1:6379> zrange z_test 0 -1 withscores
 1) "m1"
 2) "10"
 3) "m4"
 4) "12"
 5) "m3"
 6) "15"
 7) "m2"
 8) "20"
 9) "m5"
10) "42"
127.0.0.1:6379> zadd z_test ch 11 m1 6 m6 3 m3(ch等同於change,會返回修改元素的個數,包括新增的元素,和分值被修改的元素,不加ch參數的化只會返回新增的數目)
(integer) 2

命令ZCARD,得到有序集合的成員個數

127.0.0.1:6379> zcard z_test
(integer) 6

命令ZCOUNT,得到有序集合在某個分值段內的個數

127.0.0.1:6379> zrange z_test 0 -1 withscores
 1) "m2"
 2) "2"
 3) "m3"
 4) "3"
 5) "m4"
 6) "4"
 7) "m5"
 8) "6"
 9) "m6"
10) "6"
11) "m1"
12) "11"
127.0.0.1:6379> zcount z_test 5 11
(integer) 3

命令ZINCRBY,給集合內的某個元素的分值增長多少

127.0.0.1:6379> zincrby z_test 2 m5
"8"

命令ZINTERSTORE,多個有序集合取交集,並保存到一個新的集合

127.0.0.1:6379> zinterstore z_dest 2 z_test z_test1 weights 2 3
(integer) 1
127.0.0.1:6379> zrange z_dest 0 -1
1) "m6"
127.0.0.1:6379> zrange z_dest 0 -1 withscores
1) "m6"
2) "30"
127.0.0.1:6379> zinterstore z_dest 2 z_test z_test1 weights 2 3 aggregate min
(integer) 1
127.0.0.1:6379> zrange z_dest 0 -1 withscores
1) "m6"
2) "12"
127.0.0.1:6379> zinterstore z_dest 2 z_test z_test1 weights 2 3 aggregate max
(integer) 1
127.0.0.1:6379> zrange z_dest 0 -1 withscores
1) "m6"
2) "18"
127.0.0.1:6379> zinterstore z_dest 2 z_test z_test1 weights 2 3 aggregate sum
(integer) 1

命令ZLEXCOUNT,得到集合某個區間的成員個數

127.0.0.1:6379> zrange z_test 0 -1 withscores
 1) "m2"
 2) "2"
 3) "m3"
 4) "3"
 5) "m4"
 6) "4"
 7) "m6"
 8) "6"
 9) "m5"
10) "8"
11) "m1"
12) "11"
127.0.0.1:6379> zlexcount z_test [m2 [m5
(integer) 0
127.0.0.1:6379> zlexcount z_test [m2 +
(integer) 0
127.0.0.1:6379> zlexcount z_test [2 +
(integer) 6
127.0.0.1:6379> zlexcount z_test [2 [11
(integer) 0
127.0.0.1:6379> zlexcount z_test [2 [6
(integer) 0
127.0.0.1:6379> zlexcount z_test [2 [m5
(integer) 3
127.0.0.1:6379> zlexcount z_test [m2 [m5
(integer) 0

命令ZRANGEBYLEX,得到集合某個區間的成員,正序排列

127.0.0.1:6379> ZADD myzset 0 a 0 b 0 c 0 d 0 e 0 f 0 g
(integer) 7
127.0.0.1:6379> ZRANGEBYLEX myzset - [c
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> ZRANGEBYLEX myzset - (c
1) "a"
2) "b"
127.0.0.1:6379> ZRANGEBYLEX myzset [aaa (g
1) "b"
2) "c"
3) "d"
4) "e"
5) "f"

命令ZRANGEBYLEX,得到集合某個區間的成員,倒敘排列

命令ZRANGEBYSCORE,根據score獲取分值區間的成員

127.0.0.1:6379> zrangebyscore myzset 0 10
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
6) "f"
7) "g"
127.0.0.1:6379> zrangebyscore myzset 0 10 limit 2 2
1) "c"
2) "d"

命令ZRANK,獲取某個成員的排名

127.0.0.1:6379> zrank myzset c
(integer) 2
127.0.0.1:6379> zrank myzset e
(integer) 4

命令ZREM,移除一個或者多個成員

127.0.0.1:6379> zrem myzset c e
(integer) 2
127.0.0.1:6379> zrange myzset 0 -1
1) "a"
2) "b"
3) "d"
4) "f"
5) "g"

命令ZREMRANGEBYLEX,移除某個區間內的成員

127.0.0.1:6379> zrange myzset 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
6) "f"
7) "g"
127.0.0.1:6379> zremrangebylex myzset [b [f
(integer) 5
127.0.0.1:6379> zrange myzset 0 -1
1) "a"
2) "g"

命令ZREMRANGEBYRANK,移除排名段內的成員

127.0.0.1:6379> zrange myzset 0 -1
1) "a"
2) "b"
3) "c"
4) "e"
5) "f"
6) "g"
127.0.0.1:6379> zremrangebyrank myzset 2 5
(integer) 4
127.0.0.1:6379> zrange myzset 0 -1
1) "a"
2) "b"

命令ZREMRANGEBYSCORE,移除分數段內的成員

127.0.0.1:6379> zremrangebyscore myzset 0 1
(integer) 2
127.0.0.1:6379> zrange myzset 0 -1
(empty list or set)

命令ZREVRANGE,反向排序

127.0.0.1:6379> zadd myzset 0 c 1 e 2 b 3 f
(integer) 4
127.0.0.1:6379> zrevrange myzset 1 3
1) "b"
2) "e"
3) "c"

命令ZREVRANGEBYSCORE,根據分數段進行反向排序

127.0.0.1:6379> zrevrangebyscore myzset 3 1
1) "f"
2) "b"
3) "e"

命令ZREVRANK,根據排名進行反向排序

127.0.0.1:6379> zrevrank myzset b
(integer) 1
127.0.0.1:6379> zrevrank myzset f
(integer) 0

命令ZSCORE,根據給的成員得到分數

127.0.0.1:6379> zscore myzset f
"3"

命令ZUNIONSTORE,取並集而且將並集放入一個有序集合

相關文章
相關標籤/搜索