缓存存储过程返回的数据?

时间:2011-08-11 21:33:00

标签: asp.net sql-server asp.net-mvc entity-framework caching

我有一个Asp.Net MVC 3站点。以下是调用堆栈

Web page/jQuery: $(document).Ready(.... Ajax calls... render the page...)
=> MVC Control methods
=> Entity framework 4.1
=> mapped store procedures (SQL Server 2008)

问题:

  1. 实施缓存的最佳位置在哪里?
  2. 如何让页面知道下划线SQL服务器表已更新?

4 个答案:

答案 0 :(得分:0)

不确定“最佳”方法,但有一种方法是使用MVC控制器操作调用db来检查并查看数据是否已更新。 (您可以通过时间戳来完成。)

然后,生成的函数将从缓存或服务器中检索数据。

http://davidwalsh.name/cache-ajax

然而,唯一需要注意的是有趣的事情;是的,你应该确保首先发现你是否可以使用缓存内容的调用比不缓存内容更快。

答案 1 :(得分:0)

尝试尽可能靠近源添加缓存。这样,您的应用程序就可以从提高的速度中获益。

如果您控制正在修改基础表的代码,则可以从那里使缓存无效。您还可以在缓存上设置短暂超时。如果它是一个频繁使用的查询缓存它只有一秒钟可以提高速度许多倍。确保测试性能增益,以便调整超时。

答案 2 :(得分:0)

对于问题#2,您可能需要查看Query Notifications。设置一切有点复杂,但这将使您能够执行诸如缓存之类的操作,直到数据库中的数据更新为止。

答案 3 :(得分:0)

一种方法是在一定时间内缓存渲染视图。

假设您有经常不更新的页面。因此,您不必在每次访问时访问数据库,而是可以在缓存中存储渲染视图。这是使用OutputCaching - http://www.asp.net/mvc/tutorials/improving-performance-with-output-caching-cs实现的。

另一种方法是存储数据。

再次在此处您可以将其缓存一段指定的时间。在ASP.NET(MVC)中,可以使用Cache对象 - http://msdn.microsoft.com/en-us/library/aa478965.aspx来实现。 缓存对象让您指定将数据放入缓存时缓存数据的时间。例如:

Cache.Insert("key",
   myTimeSensitiveData,
   null,
   DateTime.Now.AddMinutes(1),
   TimeSpan.Zero);

或者你可以缓存,直到'无效'。

假设您有GetCustomers和UpdateCustomer方法。在GetCustomers中,您检查数据是否在Cache中。如果没有,你点击数据库,把它放在缓存中并返回。它在缓存中,直到有人调用UpdateCustomer。在该方法中,您将修改后的客户编写到数据库并使存储在Cache中的数据无效。你可以删除它。这样,当再次调用GetCustomers时,它将命中数据库并再次填充Cache。但请记住,Cache具有全局范围,并且可以同时访问许多线程。您将需要一些围绕访问Cache的同步代码。