对于我的应用程序,我需要一个包含数百万行的集合的字母索引。 当我使用排序集并给所有成员相同的分数时,结果看起来很完美。 性能也很好,测试集有 200 万行,最后三分之一的表现并不明显低于前三分之一。
但是,我需要查询这些结果。例如,获取前(最多)100 个以“goo”开头的项目。我玩过 zscan 和 sort,但它没有给我一个工作和高性能的结果。
由于 redis 在向有序集合中插入新成员时速度非常快,因此技术上必须能够立即(嗯,非常快)转到正确的内存位置。我想 redis 使用某种快速排序机制来实现这一点。 但是.. 当我只想查询数据而不是写入数据时,我似乎得不到结果。
我们使用复制的奴隶进行读取操作,我们更喜欢(默认)只读配置开关。因此,创建一个虚拟 key 并在之后将其删除(无论多么不雅)并不是一个真正的选择。
我有点卡住了,我正在考虑在 redis-server 本身中编写一个 ZLEX 命令。我可以这样使用:
HELP "ZLEX" -> (ZLEX set score startswith)
-- Query the lexicographical index of a sorted set, supplying a 'startswith' string.
127.0.0.1:12345> ZLEX myset 0 goo LIMIT 0 100
1) goo
2) goof
3) goons
4) goozer
你有什么想法?我是否遗漏了标准 Redis 命令中的某些内容?
我们在 Debian 上使用 Redis 2.8.4 x64。
亲切的问候,TW
编辑:
注意: Related issue: indexing-using-redis-sorted-sets -> 至少我给 ZLEX 起的名字似乎符合 Antirez' (Salvatore's) 的标准。截至 24-1-2014,我正在努力实现 ZLEX。对于这个用例,这似乎是最简单、最直接的解决方案,为了每个人的利益,Antirez 可以将它合并到主分支中。
最佳答案
关于indexing - Redis中具有数百万行的字母索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21311863/