2013-01-17 65 views
0

我正在使用Intranet,我想在服务器上缓存一个对象,并根据请求将其提供给用户,而不是让每个用户生成他们自己的对象副本。我也想刷新对象每30分钟...为所有用户缓存一次对象,每30分钟刷新一次

我目前使用HttpContext.Current.Cache,但我不确定是否: 1.这就是我正在寻找 2。有更好的方法来做到这一点(我在想web服务)?

谢谢。

+0

什么是对象? –

+0

这是一个由潜在数百个用户对象组成的列表。 – user948060

回答

1

使用HttpRuntime.Cache(与HttpContext.Cache相同)具有陷阱,因为它与AppDomain有关。回收时,缓存也是如此。

取而代之的是安装类似于Membase(Memcache)的东西,它充当外部缓存提供者,并且在应用程序回收之间保持持久性。

至于令人耳目一新,我个人会缓存该项目30分钟,但允许它过期。只有当请求进入并且该项目不在缓存中时才刷新它。这使得缓存高效,因为只有请求的对象保留在缓存中。

作为一个无耻的插头我写了一个缓存库前一阵子,支持内存缓存,您可以使用,在这里看到的 - http://www.lloydkinsella.net/2012/09/30/bettering-the-better-net-cache/

1

HttpContext.Current.Cache是​​的AppDomain宽缓存中的所有用户之间共享。您的情况适合存放任何需要在所有用户间共享的对象。它也支持到期。

+0

所以这意味着当第一个用户浏览到该页面时,创建了缓存,并且后续用户从缓存中检索该对象?如果两个用户以完全相同的实例进行操作,会发生什么情况? – user948060

+0

或多或少。这取决于您的代码(有关详细信息,请参阅[向缓存添加项目](http://msdn.microsoft.com/zh-cn/library/18c1wd61(v = vs.100).aspx)。如果缓存不可变的对象,则需要添加自己的锁定以防止多个请求同时修改对象。 –

相关问题