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

标签 indexing redis

对于我的应用程序,我需要一个包含数百万行的集合的字母索引。 当我使用排序集并给所有成员相同的分数时,结果看起来很完美。 性能也很好,测试集有 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 可以将它合并到主分支中。

最佳答案

我已经实现了 ZLEX

这里是完整的 specs . 您可以从这里获取新功能:github tw-bert

我还向 Antirez 发布了拉取请求 here .

亲切的问候,TW

关于indexing - Redis中具有数百万行的字母索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21311863/

相关文章:

python - TensorFlow:argmax(-min)

python - Pandas-如何添加带有跳过行的条目的列?

django - Redis队列与在apache多线程上运行的django web应用程序一起使用

database - 如何将 redis 数据库从一台服务器移动到另一台服务器?

.net - Stackexchange.Redis 的 fire and forget 是否保证交付?

python-2.7 - IndexError : index out of bound

jquery - 在特定选择器后代中查找索引

java - Testcontainer 的 Redis 容器连接到与测试中定义的容器不同的容器

node.js - 不同语言的生产者和消费者的 Redis 消息队列

sql - 优化行排除查询