缓存策略以获得更好的性能



可能的重复项:
内存中收集的 Linq 性能

我有一个拥有大约 100 万用户的 Web 应用程序。该应用程序中几乎每个网页都调用 GetUser() 方法(在活动流中加载名字和其他用户详细信息)。现在,我正在为每次调用访问数据库,并且正在考虑将所有用户缓存在内存中,并使用Linq从那里获取搜索结果或GetUser()。

我唯一的问题是缓存所有用户(在内存中)是否是一个好主意。我会浪费我的内存吗?我个人认为从 RAM 获取比从数据库获取要快得多(即使数据库经过优化和索引)。

请注意,我已经处理了缓存验证/更新/等。

堆栈溢出是否缓存其所有用户?

我们做了类似的事情,但没有转向Linq,我们只是在每个Web服务器上安装了SQL Server Express的副本。我们会将用户数据更改推送到每个 Web 服务器,并且本地应用程序使用中间层,并且只定期从本地数据库中提取数据(但至少这是本地的,而不是每个人都访问数据库)。

用于缓存的技术

以及应用(或 Linq)如何知道何时刷新其本地副本,取决于允许缓存数据的过时程度。

如果 GetUser 在大部分时间都会返回同一组用户,并且大多数用户很少被检索,则可以尝试混合方法,在这种方法中设置字典(或其他集合)并首先检查该集合并且它不存在,然后从数据库中获取它并将其存储到集合中。

使用

这种方法,您还可以使用缓存,因为它已经具有内置机制来过时和清理自身。

话虽如此,我过去曾参与过一个项目,我们为用户做同样的事情(虽然我们只有大约 100 个用户),我们所有的研究和测试都发现每次访问数据库都更快。

最新更新