【问题标题】:How to access multiple, different keys in production using Redis?如何使用 Redis 在生产环境中访问多个不同的密钥?
【发布时间】:2018-07-17 05:44:19
【问题描述】:

我有一个应用程序,我在 Redis 中存储了数百万个密钥,格式如下:

Type+#+Year+#+MachineType+#+City+#+State+#+Country+#+Size

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 的商店的键”,或任何此类组合。

我需要获取所有这些值,将它们聚合并以(理想情况下)毫秒级延迟提供出来。

我查看了KEYS,他们说 NOT 在生产中使用(另外,我从来没有完全弄清楚如何获得两个(或可能更多)城市/其他组合的值) .我查过SCAN,但基于光标,它可能不是最好的解决方案。我所看过的任何其他内容都无法以快速简便的方式完全涵盖我所描述的场景。帮忙?

【问题讨论】:

    标签: redis key key-value


    【解决方案1】:

    关于不要使用KEYS,你是对的。在您的情况下,SCAN 也很糟糕,因为您必须遍历大量的键(数百万)。 SCAN 不会阻塞其他命令太久,但总时间成本不会缩短。如果你经常运行SCAN 命令,Redis 上的负载会很重。其实我觉得 Redis 不适合这种情况,RDBMS 更好。

    我有 2 条建议:

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

    【讨论】:

    • 感谢您的回答。我们可能需要做的另一件事是聚合值,并以近乎实时的方式提供所有值(它是一个仪表板应用程序)。 ES 似乎没有易于使用的聚合功能,我正在研究 Druid。您对使用的工具有其他建议吗?
    • @CodingInCircles 恐怕没有,我在数据聚合方面没有太多经验。
    猜你喜欢
    • 2014-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-22
    • 1970-01-01
    • 2012-08-11
    • 2021-05-01
    相关资源
    最近更新 更多