Redis 排序集合

Redis ordering a sorted set

我正在尝试对以散列形式存储在 Redis 中的用户对象进行排序。 按键如users:valid:2users:valid:5users:valid:10users:invalid:14

我的目标是获取按 ID ASC 排序的用户,首先是有效用户。

我另外将用户 ID 存储在排序集中,其中 "score" 是过滤器 ID。过滤器映射就像 { valid: 0, invalid: 1 }

$redis.zadd 'sorted-ids', 0, 2
$redis.zadd 'sorted-ids', 0, 5
$redis.zadd 'sorted-ids', 0, 10
$redis.zadd 'sorted-ids', 1, 14

它允许获取已经按 ASC 排序的用户 ID,首先有效。伟大的!然而...

$redis.zrange 'sorted-ids', 0, -1, with_scores: true
=> [["10", 0.0], ["2", 0.0], ["5", 0.0], ["14", 1.0]]

“10”在“2”之前。 所以 ID 实际上不是 ASC 排序的,因为它们存储为字符串。

https://redis.io/commands/zadd

When multiple elements have the same score, they are ordered lexicographically (they are still ordered by score as a first key, however, locally, all the elements with the same score are relatively ordered lexicographically). The lexicographic ordering used is binary, it compares strings as array of bytes.

有没有办法在 Redis 中正确实现这种排序?喜欢将 ids 存储为整数以避免 lexographic 排序或我能想出的任何其他方式?

您可以用零填充您的 ID(Sorted Set 成员),即“1”变为“000000001”,字典顺序适合您。但是,请确保填充 ID 的长度保持不变(例如 9 位数字)。