redis - redis:获取集合中包含查询元素的所有键
问题描述
我正在研究 redis 以满足我的特定需求,但我知道我不知道如何实现我所需要的。
我想存储整数集(每组 100 到数千个条目),然后通过输入集“查询”。包含查询应匹配的所有元素的所有集合。(SDIFF query key
应该返回空集,然后遍历所有键)。
我看不出如何有效地做到这一点(每 10k 个键大约 5ms)?
解决方案
如果您只按整数查询数据,请考虑使用整数作为键进行存储。代替:
SADD a 3 5
SADD b 3 7
你可以:
SADD int:3 a
SADD int:5 a
SADD int:3 b
SADD int:7 b
然后你SINTER int:3 int:7 ...
用来获取所有匹配的整数集名称(你最初用于键的名称)。
如果您确实需要同时查询两种方式,那么您可能需要同时进行这两种方式。这就像在 Redis 中做一个多对多的关系。
在这里,您需要权衡插入时间和内存使用以换取快速查询性能。每次添加一对时,都需要 SADD:SADD setName int
和SADD prefix:int setName
.
如果这种额外的内存和插入工作不适合您的情况,那么您的下一个选择是使用 Lua 脚本循环遍历键(与您的集合名称匹配的模式)并使用SISMEMBER
来测试查询的整数。有关使用 Lua 循环遍历一组键的示例,请参阅Redis 的 Lua 脚本,该脚本对键的值求和。
Lua 脚本就像一个存储过程,它将在您的 Redis 服务器上自动运行。但是,对于多个整数成员测试的 10k 组,它是否会在 5 毫秒内执行,还有待观察。
推荐阅读
- python - 使用 Python 多处理读取大文件
- sas - 用 sas 程序绘制动态参考线
- oracle - 我如何使用 plsql 通过 FTP 发送 csv 文件?
- android-databinding - Android 数据绑定“找不到方法”
- javascript - 当控制台跟踪未指示完整跟踪时,在大量使用的函数中调试 javascript TypeError
- kubernetes - 用于检查 AlertManager 的错误 Prometheus 端点
- vb.net - 控制号两位反转
- swift - 在 SwiftUI 中使用 google 帐户登录后是否有任何改变视图的方法?
- recursion - Kotlin:具有递归的高阶函数
- r - 在 R 中解释 Bootstrap 结果