【问题标题】:Should I cache data pre-emptively我应该先发制人地缓存数据吗
【发布时间】:2009-06-26 14:45:13
【问题描述】:

我有一个应用程序每隔几分钟就会从设备接收消息。我也有客户端请求特定设备的最后 10 条消息。

我遇到了一些数据库饱和问题,我希望按设备缓存此列表。基本前提是,当从设备接收到消息时,接收消息的处理器将使该设备的缓存失效。

我的问题是我是否应该让缓存失效,然后在下一个客户端连接时重建它,或者我应该让设备处理器抢先重建缓存。设备处理器可以检索当前缓存弹出最后一个条目,添加新条目并缓存新结果。

我很欣赏这可能取决于答案,但我希望听到人们在这方面的经验。

【问题讨论】:

    标签: performance caching memcached


    【解决方案1】:

    我认为您在描述“预取”机制,只是为了帮助您为其命名。 :)

    我在这个特定领域没有丰富的经验,但是如果您相信您可以预取数据并可靠地预测它是客户想要的,那么您就会因此获得可衡量且理想的性能改进,然后继续试一试。

    记住要记住缓存的所有毛病。底层数据发生变化时如何失效等。祝你好运!

    【讨论】:

    • 谢天谢地,只有一个事件使缓存无效,即收到一条新消息。这个“应该”是一个相对微不足道的变化。
    【解决方案2】:

    在您量化客户端平均检索给定设备的消息的次数之前,我认为您无法回答这个问题。如果给定设备只在蓝月亮中查询一次消息,则可以在每个客户端请求上清除消息缓存。但是,如果给定设备的消息队列被多次查询,那么设备同步上的抢先式缓存可能是最好的选择;鉴于设备同步不如客户端请求频繁。

    你最好的可能是编写一个基于负载自适应缓存的系统。如果经常查询给定设备的消息队列,它会在设备同步时刷新缓存。如果设备消息队列很少被查询,则根据客户端请求刷新缓存。

    【讨论】:

      【解决方案3】:

      我听到了,但这确实取决于。在很多很多变量上。

      如果是我,我可能只会使缓存无效并让下一个客户端重建它,因为这看起来稍微简单一些,但我不明白如果不同时尝试它们,你怎么可能确定哪种方法更好。

      希望您能想出一种方法来真实地模拟繁重的客户端负载,这样您就不会弄乱实时服务器。

      【讨论】:

        猜你喜欢
        • 2010-10-22
        • 1970-01-01
        • 2023-03-03
        • 2017-02-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-08
        相关资源
        最近更新 更多