2008-11-08 56 views
0

使用鱿鱼,我们可以缓存网页。我不确定它是否提供了与ASP.NET缓存相同数量的缓存方法(我主要使用ASP.NET),但它是缓存网页的工具。使用Memcached和Squid时,是否需要ASP.NET缓存?

然后我们有memcached,它可以缓存数据库表。我相信这是正确的,它就像SqlCacheDependency(纠正我,如果我错了)。

但是,在大型Web应用程序中,是否有任何可以使用memcached,squid和ASP.NET(或PHP,JSP - 应用程序框架级别)缓存的空间。

谢谢!

回答

2

您可能发现缓存整个页面过于粗糙,并且缓存数据库表不足以提升性能,因此需要缓存大量内容。

例如,假设您有一个应用程序在每个页面上显示登录用户的名称。缓存整个页面并不会真正起作用,因此您需要在应用程序框架内的某个位置放下一个级别并缓存。

+0

您的示例是一种常见的情况。围绕整页缓存有一些方法,同时仍然改变特定的HTML片段,称为“甜甜圈缓存”。请参阅http://stackoverflow.com/questions/3318570/turn-off-page-level-caching-in-a-user-control/3318609#3318609 – 2011-10-21 23:18:16

2

然后我们有memcached,它可以缓存数据库表。我相信这是正确的,它就像SqlCacheDependency(纠正我,如果我错了)。

Memcached是一个分布式哈希表。与.NET缓存内置的主要优点相比,您的缓存是可扩展的(您可以根据需要添加任意数量的memcached boxen)并同步(您的所有Web服务器都可以访问相同的内容,并使一个Web中的数据失效或更新服务器会立即传播到所有的人)

性能方面,它比.NET缓存恶化(你正在寻找了跨服务器的对象,而不是在内存中查找一台机器上)

但是,在大型Web应用程序中是否有任何可以使用memcached,squid和ASP.NET(或PHP,JSP - 应用程序框架级别)缓存的空间。

基于上述原因,我可以想像一个2级高速缓存,使用.NET缓存第一,然后memcached的。 (例如,Get()查看memcached,将结果存储在10秒内过期的.NET高速缓存中,然后在接下来的10秒内使用.NET高速缓存对具有相同高速缓存键的所有调用进行清洗,重复)

通过这种方式,您可以在没有纯memcached解决方案的网络IO成本的情况下获得内存中缓存查找的性能,同时具备memcached的同步和可伸缩性优势。