我有一个拥有大约100万用户的网络应用程序。该应用程序中几乎每个网页都调用GetUser()方法(在活动流中加载名字和其他用户详细信息)。 现在我正在为每个调用点击数据库,我正在考虑缓存内存中的所有用户并使用Linq从那里获取搜索结果或GetUser()。
我唯一的问题是缓存所有用户(内存中)是否是一个好主意。我会浪费我的RAM吗? 我个人认为从RAM中获取比从数据库获取要快得多(即使数据库已经过优化和索引)。
请注意,我已经处理了缓存验证/更新等等。
stackoverflow是否缓存所有用户?
答案 0 :(得分:1)
我们做了类似的事情,但我们只是在每台Web服务器上安装了一份SQL Server Express,而不是转向Linq。我们会将用户数据更改推送到每个Web服务器,并且本地应用程序使用中间层并且仅定期从本地数据库中提取数据(但至少是本地应用程序,而不是每个人都访问数据库)。
您使用什么技术进行缓存,以及应用程序(或Linq)如何知道何时刷新其本地副本,取决于允许缓存数据的陈旧程度。
答案 1 :(得分:1)
如果GetUser大部分时间都会返回同一组用户,并且如果很少检索到大多数用户,您可以尝试混合方法,在其中设置字典(或其他一些集合)并首先检查该集合并且它不存在然后从数据库中获取它并将其存储到集合中。
使用这种方法你也可以使用Cache,因为它已经有内置的机制来陈旧并自我清理。
说了这些之后,我在过去的一个项目中为用户做了同样的事情(我们只有大约100个用户),而且我们所有的研究和测试都发现每次去数据库都会更快。 / p>