Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
这里添加三个成员到set集合中
127.0.0.1:6379> SADD set mysql java c++
(integer) 3
127.0.0.1:6379> SMEMBERS set
1) "c++"
2) "java"
3) "mysql"
存在即返回1,不存在返回0
127.0.0.1:6379> SISMEMBER set java
(integer) 1
127.0.0.1:6379> SISMEMBER set c
(integer) 0
127.0.0.1:6379> SCARD set
(integer) 3
移除并返回集合中的一个随机元素
127.0.0.1:6379> SPOP set
"java"
127.0.0.1:6379> SMEMBERS set
1) "c++"
2) "mysql"
弹出了java成员
和SPOP不同的是,可以一个移除多个,且不会返回成员
127.0.0.1:6379> SREM set mysql c++
(integer) 2
127.0.0.1:6379> SMEMBERS set
(empty array)
移除这两个后,变为空集合了
返回集合中一个或多个随机数
127.0.0.1:6379> SADD set mysql java c c++
(integer) 4
127.0.0.1:6379> SRANDMEMBER set 2
1) "c++"
2) "c"
我们在这里先再新建set1和set2
127.0.0.1:6379> sadd set1 java c++ redis
(integer) 3
127.0.0.1:6379> sadd set2 redis c python
(integer) 3
set和set1,以及set和set2的交集,
127.0.0.1:6379> SINTER set set1
1) "c++"
2) "java"
127.0.0.1:6379> SINTER set set2
1) "c"
返回给定所有集合的交集并存储在 destination 中
127.0.0.1:6379> SINTERSTORE des1 set set1
(integer) 2
127.0.0.1:6379> SMEMBERS des1
1) "c++"
2) "java"
127.0.0.1:6379> SDIFF set set1
1) "c"
2) "mysql"
127.0.0.1:6379> SDIFF set set2
1) "c++"
2) "mysql"
3) "java"
注意它这个差异就是除去共同的,两个独自有的全部都会算
返回给定所有集合的差集并存储在 destination 中
127.0.0.1:6379> SDIFFSTORE des2 set set2
(integer) 3
127.0.0.1:6379> SMEMBERS des2
1) "c++"
2) "java"
3) "mysql"
127.0.0.1:6379> SUNION set set1
1) "java"
2) "mysql"
3) "c++"
4) "redis"
5) "c"
所有给定集合的并集存储在 destination 集合中
127.0.0.1:6379> SUNIONSTORE des3 set set2
(integer) 6
127.0.0.1:6379> SMEMBERS des3
1) "java"
2) "mysql"
3) "c++"
4) "python"
5) "redis"
6) "c"
127.0.0.1:6379> SMEMBERS set
1) "c++"
2) "c"
3) "mysql"
4) "java"
127.0.0.1:6379> SMEMBERS set2
1) "python"
2) "redis"
3) "c"
127.0.0.1:6379> SMOVE set set2 c++
(integer) 1
127.0.0.1:6379> SMEMBERS set
1) "c"
2) "mysql"
3) "java"
127.0.0.1:6379> SMEMBERS set2
1) "c++"
2) "python"
3) "redis"
4) "c"
Redis 有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复。
注意后面要带一个score的参数
127.0.0.1:6379> ZADD zset1 99 zhang3 88 li4
(integer) 2
127.0.0.1:6379> zadd zset1 90 wang5
(integer) 1
通过索引区间返回有序集合指定区间内的成员
0到-1即所有的
127.0.0.1:6379> ZRANGE zset1 0 -1
1) "li4"
2) "wang5"
3) "zhang3"
通过分数返回有序集合指定区间内的成员
127.0.0.1:6379> ZRANGEBYSCORE zset1 90 100
1) "wang5"
2) "zhang3"
由于li4是88,不在90-100区间内不显示
127.0.0.1:6379> ZRANK zset1 li4
(integer) 0
127.0.0.1:6379> ZRANK zset1 wang5
(integer) 1
127.0.0.1:6379> ZRANK zset1 zhang3
(integer) 2
127.0.0.1:6379> ZCARD zset1
(integer) 3
127.0.0.1:6379> ZCOUNT zset1 90 100
(integer) 2
127.0.0.1:6379> ZSCORE zset1 li4
"88"
有序集合中对指定成员的分数加上增量 increment
127.0.0.1:6379> ZINCRBY zset1 5 li4
"93"
返回有序集中指定区间内的成员,通过索引,分数从高到低
127.0.0.1:6379> ZREVRANGE zset1 0 -1
1) "zhang3"
2) "li4"
3) "wang5"
zhang3是95,li4是93,wang5是90
返回有序集中指定分数区间内的成员,分数从高到低排序
注意这里是max在前,min在后,若写成80 100则会为空
127.0.0.1:6379> ZREVRANGEBYSCORE zset1 100 80
1) "zhang3"
2) "wang5"
3) "li4"
把91到100区间的成员删除了
127.0.0.1:6379> ZREMRANGEBYSCORE zset1 91 100
(integer) 2
127.0.0.1:6379> ZSCORE zset1 li4
(nil)
127.0.0.1:6379> ZSCORE zset1 zhang3
(nil)
127.0.0.1:6379> ZSCORE zset1 wang5
"90"
返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序
127.0.0.1:6379> ZREVRANK zset1 wang5
(integer) 0
127.0.0.1:6379> zadd zset1 99 zhang3 88 li4
(integer) 2
127.0.0.1:6379> ZREVRANK zset1 wang5
(integer) 1
开始为0则是最高的,后面加了两个成员后,则排第2(下标为1)