order set 有序集合
因为原来是无需的,那么怎么变有序呢?我们就需要一个有序因子(例如:年龄,身高等)我们把这个因子叫score
下面来看有序集合的命令,注意与set的区别:set
------有序集合的增删差
1.zadd key score1 value1 score2 value2 ...添加元素
2.zrange key start stop [withscores] 把集合排序后返回名次[start, stop]的元素,withscores:是把score也打印出来
3.zrangbyscore key min max [withscores] limit offset N
集合(升序)排序后取出score在[min, max]内的元素,并跳过offset个,取出N个
4.zrank key member 查询member的排名(升序0名开始)
5.zrevrank key member 查询member的排名(降序0名开始)
6.zrem key value1 value2...删除集合中的元素。
7.zremrangebysocre key min max 按照score来删除[min, max]之间的元素
8.zremrangebyrank key start stop 按照排名删除[start, stop]之间的元素
--------有序集合的统计:
1.zcard key 返回元素个数
2.zcount key min max 返回[min, max]集合中元素的个数
-------有序集合的运算:
zinterstore destination numkeys key1 [key2 ...]
[WEIGHTS weight [weight....]]
[AGGREGATE SUM|MIN|MAX]
求key1, key2的交集,key1, key2的权重分别是weight1, weight2
聚合方法用:sum min max
聚合的结果保存在dest集合中
(求几个集合的交集,完了还可能要求交集的最大值最小值或者和)。
注意:weights aggregate 如何理解?
答:如果有交集,交集元素又有score , score怎么处理?
aggregate sum->score相加, min求最小score, max求最大score
另:可以通过weight设置不同key的权重, 交集时score*weights
比如 :两个人卖宠物
李四:2 cat 3 dog 5 monkey
王五:3 cat 4 dog 6 monkey
1.zinterstore result 2 李四 王五 aggregate sum|min|max
这就会得出这两个人卖的相同的宠物且求出对应的和|最小|最大
2.加上权重就好像宠物的品种不同
zinterstore result 2 李四 王五 2 1 aggregate sum|min|max
这里看sum 就会得出cat 7 dog 10 monkey 16 为什么呢?
因为加入了权重,李四的宠物一只顶2*score 只。