如何使用Redis访问生产中的多个不同密钥?

时间:2018-02-07 02:57:41

标签: redis key key-value

我有一个应用程序,我可以用以下格式在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,但是基于游标,它可能不是最好的解决方案。我没有看到任何其他内容,这些内容完全覆盖了我已经快速简便地描述的场景。帮助

1 个答案:

答案 0 :(得分:1)

你是对的,不要使用KEYS。在你的情况下,SCAN也很糟糕,因为你必须迭代大量的密钥(数百万)。 SCAN不会长时间阻止其他命令,但总时间成本不会缩短。如果经常运行SCAN命令,Redis上的负载将非常繁重。事实上,我认为Redis不适合这种情况,RDBMS更好。

我有2条建议:

  1. 使用SCAN并注意潜在风险,做一些严肃的测试。
  2. 在某处存储并维护密钥关系(例如City-Keys),首先找到您需要的密钥,然后从redis获取这些密钥的值。在您的情况下,我建议将所有密钥放在RDBMS表中,并使用LIKE找到您需要的密钥(当然,使用solr或elasticsearch等搜索引擎在性能方面要好得多)