代码之家  ›  专栏  ›  技术社区  ›  Steve Weet

我应该先缓存数据吗

  •  4
  • Steve Weet  · 技术社区  · 15 年前

    我有一个应用程序每隔几分钟从设备接收一次消息。我还有一些客户机为一个特定的设备请求最后10条消息。

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

    我的问题是,我是应该先使缓存失效,然后在下一个客户机连接时重新构建它,还是应该让设备处理器先发制人地重新构建缓存。设备处理器可以检索当前缓存,弹出最后一个条目,添加新条目并缓存新结果。

    我很感激这可能是一个因人而异的答案,但我也很感激听到人们在这方面的经历。

    3 回复  |  直到 15 年前
        1
  •  1
  •   Greg D    15 年前

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

    我在这个特定领域没有太多的经验,但是如果你相信你能预先获取数据并可靠地预测到这是客户想要的,并且你因此获得了可衡量的、令人满意的性能改进,那么就继续尝试吧。

    记住要记住缓存的毛躁。当基础数据发生变化时,它是如何失效的?祝你好运!

        2
  •  1
  •   Frank Rosario    15 年前

    我不认为你能回答这个问题,除非你量化了一个客户平均为一个给定的设备检索消息的次数。如果一个给定的设备在蓝月中只查询一次消息,那么可以清除每个客户机请求上的消息缓存。但是,如果多次查询给定设备的消息队列,那么在设备同步时进行抢先缓存可能是最佳选择;鉴于设备同步的频率低于客户端请求的频率。

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

        3
  •  0
  •   Eli    15 年前

    我听到了,但这真的要看情况而定。在许多,许多变量上。

    如果是我,我可能会使缓存失效,让下一个客户机重新构建它,因为这看起来有点简单,但是我不知道如何在不同时尝试这两种方法的情况下确定哪种方法更好。

    希望,您可以想出一种方法来真实地模拟一个沉重的客户机负载,这样您就不会乱动实时服务器。