我有一个应用程序,我可以用以下格式在Redis中存储数百万个密钥:
键入+#+年份+#+ MachineType +#+市+#+国家+#+国家+#+尺寸
Sample_Key Value
Retail#2017#MachineA#SanFrancisco#CA#USA#500 1000
Bulk#2017#MachineB#NewYorkCity#NY#USA#1000 100000
Retail#2017#MachineA#NewYorkCity#NY#USA#1000 5000
我的客户会进来,想要一个特定的价值或一组价值汇总,比如说,旧金山,加利福尼亚和纽约纽约的一切,以获得1000和5000(然后我们执行它的一些聚合)。什么Redis功能最适合说,"给我包含旧金山或纽约的钥匙的所有价值"或者"给我所有商店大小为1000和#34的钥匙;或任何此类组合。
我需要获取所有这些值,聚合它们并以(理想情况下)毫秒级延迟提供服务。
我查了KEYS
他们说 NOT 用于制作(另外,我从来没有想过如何获得两个(或更多)城市/其他城市的价值组合)。我查了SCAN
,但是基于游标,它可能不是最好的解决方案。我没有看到任何其他内容,这些内容完全覆盖了我已经快速简便地描述的场景。帮助
答案 0 :(得分:1)
你是对的,不要使用KEYS
。在你的情况下,SCAN
也很糟糕,因为你必须迭代大量的密钥(数百万)。 SCAN
不会长时间阻止其他命令,但总时间成本不会缩短。如果经常运行SCAN
命令,Redis上的负载将非常繁重。事实上,我认为Redis不适合这种情况,RDBMS更好。
我有2条建议:
SCAN
并注意潜在风险,做一些严肃的测试。LIKE
找到您需要的密钥(当然,使用solr或elasticsearch等搜索引擎在性能方面要好得多)