Redis学习(二)—— 数据类型(2)

1、Set类型

    Set和List相似,都能存储多个字符串,Set中的字符串不能存在相同的元素,并且是无序的

    命令SADD,给集合中添加一个或多个成员

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,获取集合中成员的个数

127.0.0.1:6379> scard se_test
(integer) 2

    命令SDIFF,获取给的第一个集合和后面所有集合的差集(只有集合a有的值,后面集合都没有的值)

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,获得给定集合的交集

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,获得给定集合的交集,并将交集放到另一个集合

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,判断给的值在不在该集合中

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"

2、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"

3、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,取并集并且将并集放入一个有序集合

猜你喜欢

转载自my.oschina.net/u/1175305/blog/1807376