服务器场中的应用程序缓存值得复杂吗?

时间:2013-06-18 21:38:02

标签: caching web-farm

我继承了一个系统,来自不太可能改变的SQL RDBMS的数据缓存在Web服务器上。

这是个好主意吗?我理解它的逻辑 - 我不需要用每个请求向数据库查询这些数据,因为它没有改变,所以只需将它保存在内存中并保存数据库调用。但是,我不禁想到这并没有真正给我任何东西。 SQL是基本的。例如:

SELECT StatusId, StatusName FROM Status WHERE Active = 1

这给了我不到10条记录。我的数据库与我的Web服务器位于同一数据中心。现代数据库设计来存储和调用数据。我的应用程序缓存真的比数据库调用更有效吗?

问题出现在我有一个服务器场并且必须想出一种方法来保持服​​务器之间的缓存同步。也许我低估了数据库调用的成本。将数据保留在内存中所带来的性能优势是否值得在数据发生变化时保持每个服务器缓存同步的复杂性?

2 个答案:

答案 0 :(得分:3)

缓存的好处与您需要缓存项目的次数以及获取缓存项目的成本有关。如果每次都必须运行查询,那么即使只有10行长的状态表也可能“成本高昂”:建立连接,如果需要,执行查询,通过网络传递数据等。如果经常使用,好处可能会增加并且意义重大。比如,你需要每秒检查一次状态1000次或每个网站请求,你已经保存了1000个查询,你的数据库可以做更有用的事情,你的网络没有加载聊天。对于您的Web服务器,从缓存中检索项目的成本通常很低(除非您缓存数万或数十万个项目)。因此,从缓存中提取内容几乎每次都会比查询数据库更快。如果您的数据库是系统的瓶颈(许多系统就是这种情况),那么缓存肯定是有用的。

但最重要的是,如果没有运行基准或了解您如何使用数据的详细信息,很难说是或否。我刚刚强调了一些需要考虑的事项。

答案 1 :(得分:1)

还有其他因素可能发挥作用,例如,使用EF可以为简单的数据检索添加大量额外的处理。请求数量,而不仅仅是数据量可能是一个因素。

未来的设计可能会影响您的决定 - 也许缓存会移动到其他位置并且不再位于同一位置。

你的问题没有正确的答案。在你的情况下,也许没有优势。虽然使用缓存已经存在缺点 - 但您必须更改现有代码。