我应该先发制人地缓存数据

时间:2009-06-26 14:45:13

标签: performance caching memcached

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

我正在遭受一些数据库饱和,我希望按设备缓存此列表。基本前提是,当从设备接收到消息时,接收消息的处理器将使该设备的高速缓存无效。

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

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

3 个答案:

答案 0 :(得分:1)

我认为你正在描述一个“预取”机制,只是为了帮助你给它起一个名字。 :)

我在这一特定领域没有丰富的经验,但如果您认为可以预先获取数据并可靠地预测数据是客户想要的,那么您可以获得可衡量且理想的性能提升然后继续进行旋转。

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

答案 1 :(得分:1)

在您量化客户端平均检索给定设备的消息的次数之前,我认为您无法回答此问题。如果在蓝色月亮中仅查询给定设备的消息,则可以在每个客户端请求上清除消息缓存。但是,如果多次查询给定设备的消息队列,则设备同步上的抢占式高速缓存可能是最佳选择;鉴于设备同步的频率低于客户端请求。

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

答案 2 :(得分:0)

我听到了,但它确实依赖。关于许多变量。

如果是我,我可能只是让缓存无效并让下一个客户端重建它,因为这似乎稍微简单,但我不知道如何在不尝试两者的情况下确定哪种方式更好。

希望您可以想出一种方法来逼真地模拟繁重的客户端负载,这样您就不会乱搞现场服务器。