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