ZADD myset 1 ad1
ZADD myset 1 ad2
SET order:ad1 1
SET order:ad2 2
Run Code Online (Sandbox Code Playgroud)
如何先按订购的套装分数排序,然后再按订单价值排序?
Did*_*zia 10
如果要存储结果(不改变数据的存储方式),则可以使用SORT命令.它可以应用于zset.
例如:
> zadd myset 1 albert
> zadd myset 1 joseph
> zadd myset 4 bertrand
> zadd myset 2 casimir
> zadd myset 3 alfred
Run Code Online (Sandbox Code Playgroud)
您可以按值排序:
> sort myset alpha
1) "albert"
2) "alfred"
3) "bertrand"
4) "casimir"
5) "joseph"
Run Code Online (Sandbox Code Playgroud)
您可以按分数和值排序:
> zrange myset 0 -1
1) "albert"
2) "joseph"
3) "casimir"
4) "alfred"
5) "bertrand"
Run Code Online (Sandbox Code Playgroud)
现在让我们为这些对象添加一个新属性:
> set order:albert 5
> set order:alfred 3
> set order:casimir 1
> set order:joseph 4
> set order:bertrand 2
Run Code Online (Sandbox Code Playgroud)
您可以按新订单属性进行排序:
> sort myset by order:*
1) "casimir"
2) "bertrand"
3) "alfred"
4) "joseph"
5) "albert"
Run Code Online (Sandbox Code Playgroud)
现在,如果您需要按分数AND此顺序属性进行排序,那么除了在zset中实现order属性之外别无选择,或者在order属性中实现分数.
例如,在zset中添加order属性,我们得到:
> del myset
> zadd myset 1 5:albert
> zadd myset 1 4:joseph
> zadd myset 4 2:bertrand
> zadd myset 2 1:casimir
> zadd myset 3 3:alfred
> zrange myset 0 -1
1) "4:joseph"
2) "5:albert"
3) "1:casimir"
4) "3:alfred"
5) "2:bertrand"
Run Code Online (Sandbox Code Playgroud)
注意:在这种情况下,属性字段根据字典顺序排序,因此如果您需要数字顺序和多个数字,则可能必须对值进行标准化.有各种各样的技巧可以做到这一点.例如,您可以存储"11","212"或"3123",而不是存储"1","12"或"123",第一个数字代表您的号码的位数.
如果得分和订单属性都可以更改,这不是很方便,您可以通过在客户端进行排序来获得更好的服务.这可以通过检索一侧带有分数的zset和另一侧的相应顺序值在两次往返中实现.
> zrange myset 0 -1 withscores
> sort myset by order:* get order:* get #
Run Code Online (Sandbox Code Playgroud)
由客户端加入两个结果(使用某种字典或关联数组),并排序以获得最终结果.
| 归档时间: |
|
| 查看次数: |
6741 次 |
| 最近记录: |