redis - 为什么我不能在 redis 中的这个排序集上使用 ZRANGEBYLEX?
问题描述
在redis文档中,有这个例子ZRANGEBYLEX
ZADD myindex 0 0056:0028.44:90
ZADD myindex 0 0034:0011.00:832
ZRANGEBYLEX myindex [0056:0010.00 [0056:0030.00
1) "0056:0028.44:90"
这非常简单。
但是,如果我想将相同的技术应用于以下示例,
127.0.0.1:6379> zadd feedbacks 1 feedback1 2 feedback2 3 feedback3 1 feedback4
(integer) 4
127.0.0.1:6379> ZRANGEBYLEX feedbacks [feed [feed
(empty list or set)
我得到一个空集。
我希望看到四个值(feedback1
to feedback4
)
为什么ZRANGEBYLEX
我的测试样本失败了?
解决方案
它失败了,因为他们有不同的分数。ZRANGEBYLEX 仅适用于相同分数的子集。
见https://redis.io/commands/ZRANGEBYLEX
当一个有序集合中的所有元素都以相同的 分数插入时,为了强制字典顺序,该命令返回有序集合中的所有元素在 key 处,其值介于 min 和 max 之间。
如果排序集中的元素有不同的分数,则返回的 元素是 unspecified。
排序集具有在相同分数子集中按字典顺序排序的属性。这为他们提供了第二个用例,一个按字典顺序排序的集合,但在这种情况下,您添加了具有相同分数的所有元素。
所以,你必须选择如何使用你的排序集:
- 按分数排序(使用相同分数排序的 lex,用于可预测的顺序)
- 按字典顺序排序,所有元素给出相同的分数
你不能两者兼得。那么你需要两个排序集。