Redis 中具有数百万行的字母索引

Tw *_*ert 5 indexing redis

对于我的应用程序,我需要一个包含数百万行的集合的字母索引。当我使用排序集并给所有成员相同的分数时,结果看起来很完美。性能也很棒,在 200 万行的测试集上,后三分之一的性能并不明显低于前三分之一。

但是,我需要查询这些结果。例如,获取前(最多)100 个以“goo”开头的项目。我尝试过 zscan 和 sort,但它没有给我一个有效的和高性能的结果。

由于 Redis 在向排序集中插入新成员时速度非常快,因此技术上必须能够立即(嗯,非常快)转到正确的内存位置。我想 Redis 使用某种快速排序机制来完成此任务。但是..当我只想查询数据而不写入数据时,我似乎没有得到结果。

我们使用复制的从属设备进行读取操作,并且我们更喜欢(默认)只读配置开关。因此,创建一个虚拟密钥并随后将其删除(尽管不优雅)并不是一个真正的选择。

我有点卡住了,我正在考虑在 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
Run Code Online (Sandbox Code Playgroud)

你怎么看?我是否遗漏了标准 redis 命令中的某些内容?

我们在 Debian 上使用 Redis 2.8.4 x64。

亲切的问候,TW

编辑:

注意: 相关问题:indexing-using-redis-sorted-sets -> 至少我给 ZLEX 起的名字似乎符合 Antirez(Salvatore)的标准。截至 2014 年 1 月 24 日,我正在致力于实施 ZLEX。对于这个用例来说,这似乎是最简单、最直接的解决方案,Antirez 可以将其合并到主分支中,以造福于每个人。

Tw *_*ert 2

我已经实施了ZLEX.

以下是完整规格。您可以从这里获取新功能:github tw-bert

我还在此处向 Antirez 发布了拉取请求。

亲切的问候,TW