【问题标题】:Caching database query results on webserver in a database using .net cache provider classes使用 .net 缓存提供程序类在数据库中的网络服务器上缓存数据库查询结果
【发布时间】:2011-09-29 11:45:58
【问题描述】:

我有一个类似电子商务的网站要构建,并且考虑到我们必须处理的请求的频率和数量,最好从一开始就在我们的代码库中加入缓存。我读到了 .net 4 的 system.runtime.cache 和 system.web.cache。这些类在应用程序级别提供缓存。也有可能使用 outputcacheprovider 接口实现我们自己的自定义提供程序。

现在我在想,最好在网络服务器本身有一个小型数据库服务器,它将缓存经常进行的 sql 查询的结果,这些查询可能是网页的服务器,并且可以节省我到实际数据库服务器的往返行程和数据库访问。

我浏览了很多博客,但没有找到与此直接相关的任何内容。 现在我有几个问题: 1. webserver 上有一个小的 dbserver 来处理频繁的查询好不好? 2. 是否可以使用 outputcacheprovider 来实现这种缓存?

【问题讨论】:

    标签: .net asp.net database caching


    【解决方案1】:

    除了在您的网络服务器上增加负载之外,它并不会真正做很多事情。唯一可能产生影响的情况是网络服务器和数据库服务器之间的网络是否存在足够的延迟以使其值得。

    缓存的重点是您将处理过的数据保存在快速介质(即内存)中。

    您最好查看 appfabric 或 memcache 之类的东西来提供缓存而不是数据库。

    另外,请注意找出缓存和输出缓存之间的区别。缓存将数据保存在内存中,供您的应用程序根据需要使用。 OutputCaching 是为页面存储生成的输出,这意味着未来的请求会获取缓存的版本,并且您不必每次都生成页面。

    【讨论】:

    • 另外,您必须小心缓存的内容和位置。如果您在 asp.net 缓存中插入任何数据,那么您的应用程序域中的每个线程都可以访问它。如果您在 Asp.net 会话中插入数据,那么只有当前用户的上下文可以访问该数据。因此,如果需要,我会在 asp.net 缓存中插入国家列表和州列表等内容,并在 asp.net 会话中插入用户执行的查询结果或详细信息数据。
    • @NabheetSandhu 你能给我一个链接到任何介绍如何使用会话缓存和 asp.net 缓存以及它们之间的区别的文章。正如我所说,我还没有开始编码,我只想在我加入之前完成所有事情。谢谢。
    • "...唯一可能会产生影响的情况是您的网络是否存在足够的延迟..." 不一定。数据库结果缓存(也称为 SQL 依赖通知)还可以帮助减少对数据库服务器的调用(往返)次数,因此 SQL 查询根本不必编译和运行,从而减少两台服务器上的 CPU 和 I/O 负载(web 和 SQL)除了网络流量/瓶颈和重建每个请求的对象图。
    • @Mufasa 通常是的,这是真的。在上述问题的上下文中,它不会有所作为,因为我指的是 OP 建议在本地 sql 服务器上保留数据的镜像副本。因此,您不会得到您建议的所有好处。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-24
    • 2016-11-13
    • 2016-04-22
    • 2012-03-02
    相关资源
    最近更新 更多