asp.net - HttpRuntime.Cache 不适合网络农场?

标签 asp.net asp.net-mvc caching memcached

我听说 HttpRuntime.Cache 不适合与网络场一起使用。这是为什么?有哪些解决此问题的好示例?我听说过Memcached和类似的产品,但我找不到任何显示基本用法的最新示例。

最佳答案

服务器场中 HttpRuntime.Cache 的一个问题是缓存中的大部分数据将在服务器之间重复。

例如,假设您有一个电子商务网站,并将产品目录存储在缓存中(因为它很少更改),这需要 20M 内存。如果您有 5 个 Web 服务器,每个服务器的缓存中都会有自己的产品目录副本,总共使用 100M 内存(20M * 5 个服务器)。使用像 memcached 这样的共享缓存可以仅存储缓存项目的一份副本而不是 5 个副本(每个服务器一个),从而消除了这种浪费。

另一个问题是缓存同步。再次假设您从数据库检索产品目录后将其缓存 1 小时。每个服务器都可以在其缓存中拥有一份目录副本,该副本在不同时间到期。当一台服务器上的缓存过期时,它可以获得其他服务器尚未获得的更新数据。

这可能会导致奇怪的用户体验,他们可能会看到某个类别中的 50 个产品,然后刷新页面,发送到不同的服务器,然后看到 51,再次刷新并再次看到 50,等等。使用共享缓存,你不必担心这个。

关于asp.net - HttpRuntime.Cache 不适合网络农场?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10643272/

相关文章:

asp.net-mvc - 在 ASP.NET MVC Html.ActionLink 中包含 anchor 标记

.net - ASP.NET MVC 值得研究吗?

javascript - 在javascript中删除浏览器缓存

node.js - Angular 7 浏览器未反射(reflect)代码中所做的更改

.net - SqlBulkCopy超时已过期

asp.net-mvc - foreach 语句无法运行,因为不包含 'GetEnumerator' 的公共(public)定义

javascript - 按下拉所选项目过滤的数据表

javascript - 通过页面缓存 Canvas

asp.net - 用于在带有复选框的 gridview 上进行操作的 Jquery 函数

asp.net - VB.net如何处理SqlDataReader空值