Redis太棒了!
如果我有2个有序集合,例如 - “set1 = key1:100,key2:200,key3:300”
和另一个像“set2 = key1:1,key2:2,key3:3”
然后是否可以这样--set3 = key1:100_1,key2:200_2,key3:300_3
我不想添加相同键的值或取相同键的最小值/最大值。 是否有可能将这些价值结合在一起? 我希望将这两个值一起用于同一个键。
答案 0 :(得分:1)
有序集合中的分数必须是数值,因此无法在交集/并集操作中返回分数的简单连接。
但是,如果您可以将每个集合的分数值绑定到给定范围,则可以使用SUM运算通过简单的算术在单个值中对两个值进行编码。
示例:
# For s1, we assume the score is between 0 and 999
> zadd s1 100 key1 200 key2 300 key3
(integer) 3
# For s2, we assume the score is between 0 and 99
> zadd s2 1 key1 2 key2 3 key3
(integer) 3
# Get the intersection, dividing the s2 score by 100
> zinterstore s3 2 s1 s2 WEIGHTS 1 0.01
(integer) 3
# Get the result with scores
> zrange s3 0 -1 withscores
1) "key1"
2) "100.01000000000001"
3) "key2"
4) "200.02000000000001"
5) "key3"
6) "300.02999999999997"
在得到的分数中,整数部分包含来自s1的分数,小数部分包含来自s2的分数。
请注意,分数是双浮点数。它有一些后果:
如果仅操纵整数(即0.0299999 ...实际上是0.03),则可能需要将其正确舍入
将两个数值编码为一个意味着精度除以2(仅16位到8位)。它可能适合您的需要也可能不适合。