c# - IIS6 ASP.NET 2.0 应用程序缓存 - 大量数据的数据存储选项和性能

标签 c# asp.net caching iis-6

IIS6 上的 ASP.NET 2.0 站点中,我想将键/值对存储在应用程序缓存中。每个键始终是一个长度为 5 个字符的字符串,每个值都是一个长度为 15 - 250 个字符的字符串。

使用场景是每次网页请求都会查询一次缓存,如果 Key 存在则使用 Value 否则查询数据库并向缓存添加新的 Key/Value 或根据某些应用程序逻辑替换现有条目.

在这种情况下,我设想/要求缓存大小达到大约 1000 个条目,在此大小它将变得稳定并且很少(如果有的话)如上所述进行更改。

在我只是“自己进行性能测试”之前,有没有人对大量缓存数据有过关于性能是否更可取的经验:

(1) 使用 1 个包含 SortedDictionary<string, string> 的缓存对象或

(2) 允许创建 1,000 个缓存对象并将缓存本身用作字典或

(3) 所讨论的数据量无关紧要。如果条目数增加到 10,000 或 100,000,在哪种情况下您的答案会改变?

非常感谢。

最佳答案

1000 不是很大的数据量;这将工作正常,但如果此数据在请求之间共享,则您需要考虑同步。实际上是一个 lock访问 Dictionary<string,string>可能没问题,但如果需要,您可以更细粒度。

然而,内置的网络缓存 ( HttpContext.Cache ) 也将解决同样的问题,并且内置了所有线程安全。

不要使用 SortedDictionary<,>除非您关心数据是否已排序。我认为你不会。

随着数字越来越大,我更倾向于考虑像 redis/memcached 这样的存储,将本地内存作为本地快捷方式。

关于c# - IIS6 ASP.NET 2.0 应用程序缓存 - 大量数据的数据存储选项和性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6609802/

相关文章:

c# - 将动态变量转换为给定类型

javascript - 如何使用 twilio-csharp 库发送 IP 消息

javascript - ScriptManager.RegisterClientScriptBlock 无法打开特定大小的窗口

javascript - 如何在 Javascript 中检查 RadGrid EditColumn 的 id 是否有效

c# - 给定单例缓存模式的缺点

c# - 'System.Security.Cryptography.CryptographicException' : keyset does not exist 类型异常

c# - 与 Windows 服务通信的最快方法

c# - 如何引用 LINQ 中使用保留字命名的字段?

.net - NHibernate 不缓存属性

node.js - 如何使用redis在 Node 中缓存查询数据