set集合是string类型的无序集合,set是通过Hashtable实现的,对集合我们可以取交集、并集、差集。
sadd方法:向名称为key的set中添加元素
sadd set1 a
sadd set1 b
sadd set1 c
小结:set集合不允许重复元素
smembers查看set集合的元素
srem方法:删除set集合元素
srem set1 a
spop方法:随机返回删除的key
spop set1
sdiff方法:返回两个集合的不同元素(哪个集合在前面就以哪个集合为标准)
smembers set3
a
b
c
smembers set4
a
b
d
sdiff set3 set4
c
sdiffstore方法:将返回的不同元素存储到另一个集合里
sdiffstore set5 set3 set4
1
smembers set5
c
举例:
命令:smembers set1
结果:1) "c"
2) "a"
3) "b"
命令:smembers set2
结果:1) "d"
2) "c"
3) "b"
命令:sdiffstore set3 set1 set2
返回结果:1
命令:smembers set3
返回结果:"a"
小结:这里是把set1和set2的不同元素(以set1为准)存储到set3集合里
sinter方法:返回集合的交集
sintersore方法:返回交集结果,存储在set集合中
smembers set4
1) "c"
2) "a"
3) "b"
smembers set5
1) "d"
2) "a"
3) "b"
sinter set3 set4
1) "a"
2) "b"
sinterstore set6 set4 set5
(integer) 2
smembers set3
1) "a"
2) "b"
sunion方法:取并集
sunionstore方法:取得并集,并存储到集合中
smembers set4
1) "c"
2) "a"
3) "b"
smembers set5
1) "d"
2) "a"
3) "b"
sunion set4 set5
1) "b"
2) "a"
3) "c"
4) "d"
sunionstore set7 set4 set5
(interger) 4
smembers set7
1) "b"
2)"a"
3)"c"
4) "d"
smove方法:从一个set集合移动到另一个set集合里
smembers set1
1) "c"
2) "a"
3) "b"
smembers set2
1) "d"
2) "a"
3) "b"
smove set1 set2 c
(integer) 1
smembers set1
1) "a"
2) "b"
smembers set2
1) "b"
2) "a"
3) "c"
4) "d"
小结:将set1中的元素移动到set2中(相当于剪切复制)
scard方法:查看集合里元素个数
sismember方法:判断某元素是否为集合中的元素。返回1代表是集合中的元素,0代表不是
srandmember方法:随机返回一个元素
scard set2
(integer) 4
sismember set2 a
(integer) 1
sismember set2 e
(integer) 0
srandmember set2
"b"
zadd向有序集合中添加一个元素,该元素如果存在,则更新顺序
在重复插入的时候,会根据顺序属性更新
zadd zset1 5 five
(integer) 1
zadd zset1 2 two
(integer) 1
zadd zset1 3 three
(integer) 1
zadd zset1 1 one
(integer) 1
zadd zset1 4 four
(integer) 1
zrange zset1 0 -1 withscores
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"
7) "four"
8) "4"
9) "five"
10) "5"
zrange zset1 0 -1
1) "one"
2) "two"
3) "three"
4) "four"
5) "five"
应用:排行榜rank,Lucene,rank把海量数据在内存中检索。例如100W条数据,有6个定义,6个条件分值匹配,计算匹配度最高的,排名在最前面。当用户进入页面,100W条数据加入到内存中,很快,选择某几个条件,根据分值,搜索排名度最高的分值。
zset中的score就是分值
算法:快速在海量数据里做一个优先级排行
solr搜索引擎,第一步是过滤,第二步是rank排名。两步都需要算法。
zrem删除名称为key的zset中的元素member
zrem zset1 one
(integer) 1
zrange zset1 0 -1 withscores
1) "two"
2) "2"
3) "three"
4) "3"
5) "four"
6) "4"
7) "five"
8) "5"
zincrby以指定值去自动递增或者减少,用法和之前的incrby类似
zincrby zset1 1 two
(zincrby key increment member)
zrange zset1 0 -1 withscores
1) "three"
2) "3"
3) "two"
4) "3"
5) "four"
6) "4"
7) "five"
8) "5"
zrangebyscore 找到指定区间范围的数据进行返回
zrangebyscore zset1 3 4
1) "three"
2) "two"
3) "four"
zrangebyscore zset1 3 4 withscores
1) "three"
2) "3"
3) "two"
4) "3"
5) "four"
6) "4"
zremrangebyrank 删除 0到1(删除索引0,1)
zremrangebyrank zset1 0 1
zrange zset1 0 -1 withscores
1) "four"
2) "4"
3) "five"
4) "5"
5) "sadfa"
6) "6"
zremrangebyscore删除指定序号
zremrangebyscore zset 5 6
(integer) 2
zrange zset1 0 -1 withscores
1) "four"
2) "4"
zrank返回排序索引,从小到大排序(升序排序之后再找索引)
注意:一个是顺序号,一个是索引,zrank返回的是索引
zrevrank返回排序索引,从大到小排序(降序排序之后再找索引)
zadd zset1 1 "one"
zadd zset1 2 "two”
zadd zset1 3 "three"
zadd zset1 5 "five"
zadd zset1 6 "six"
zrange zset1 0 -1
1) "one"
2) "two"
3) "three"
4) "four"
5) "five"
6) "six"
zrank zset1 "two"
(integer) 1
zrank zset1 "three"
(integer) 2
zrank zset1 "one"
(integer) 0
zcard 返回集合里所有元素的个数
zcard zset1
(integer) 6
zcount 返回集合中score在给定区间里的数量
zcount zset1 1 4
(integer) 4
zremrangebyrank zset [from] [to] 删除索引
zrange zset1 0 -1 withscores
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"
7) "four"
8) "4"
9) "five"
10) "5"
11) "six"
12) "6"
zremrangebyrank zset1 0 1
(integer) 2
zrange zset1 0 -1 withscores
1) "three"
2) "3"
3) "four"
4) "4"
5) "five"
6) "5"
7) "six"
8) "6"
zremrangebyscore zset [from][to] (删除指定序号)
zremrangebyscore zset1 4 6
(integer) 3
zrange zset1 0 -1 withscores
1) "three"
2) "3"