我有一个分数列表。使用这些,我需要从redis排序集中提取值。
我知道我可以使用zrangebyscore
- 但是如果我提供的列表中的分数不是连续的怎么办?在这种情况下,我不能依赖zrangebyscore min max
类型命令。
在这种情况下,从排序集中检索这些值的最有效方法是什么?我能做的最好就是在这里逐一检索。正确的吗?
这是一个示例(将有序集显示为元组列表):
list_of_scores = [4, 1, 3] # these are to be retrieved
sorted_set = [(item_1, 1),
(item_2, 2),
(item_3, 3),
(item_4, 4)]
每个元组都是member, score
对。
更新:这里有一个建议:
for score in scores:
my_pipeline.zrangebyscore("my_sorted_set",score,score)
result = my_pipeline.execute()
答案 0 :(得分:0)
一对一检索的问题是RTT太多了。您可以使用PIPELINE
或将流程包装到Lua脚本中,以使逐个检索更有效。
此外,您似乎使用Sorted Set
作为HASH
,例如得分为哈希键,成员名称为哈希值。因此,HASH
可能更适合您的场景。