我有一个Web应用程序(MainApplication),其中许多页面包含一个自定义Web控件,用于在缓存中查找某些内容。如果它无法在缓存中找到任何数据,那么它会转到内容的数据库。检索内容后,控件将在页面上显示内容。
在上述Web应用程序中的子目录中有一个Web应用程序(CMS)。用户使用此CMS更新MainApplication引入的内容。
当用户使用CMS更新某些内容时,我需要CMS清除MainApplication使用的缓存的相关部分。问题是,作为两个不同的Web应用程序,它们不能简单地与相同的静态缓存对象进行交互。
理想的解决方案是以某种方式在两个Web应用程序之间共享缓存对象的实例。
如果不这样,两个Web应用程序之间通信的最佳(性能)方式是什么?显然,写入/读取数据库会破坏目的。我在考虑一个平面文件?
更新
谢谢大家的帮助。你的精彩答案实际上给了我正确的搜索条件,发现这是一个重复的问题(对不起!):Cache invalidation between two web applications
答案 0 :(得分:2)
在这种情况下我想到的一个选择是使用Velocity分布式缓存机制。请阅读并尽可能尝试http://msdn.microsoft.com/en-us/magazine/dd861287.aspx
答案 1 :(得分:2)
我在之前的项目中拥有完全相同的设置,我们有一个ASP.NET Web应用程序(使用MCMS Backing),另一个ASP.NET Web应用程序用于显示数据。
完全不同的服务器(尽管相同的域名)。
但是,当“编辑器”更新CMS应用程序中的内容时,UI会自动刷新。
如何?很高兴你问。
我们将内容存储在SQL Server中,并使用了Replication。 :)
“前端”Web应用程序将读取数据库中的数据(由CMS系统复制)。
现在 - 我们不缓存这些数据,因为在数据库中,我们实际存储了控件的标记(HTML)。因此,我们动态地重新呈现HTML。
为什么“打败目的”?
您无法让一个应用程序“使另一个应用程序上的缓存无效”。
如果您沿着这条路走下去,您需要考虑一个分布式缓存引擎(例如Velocity)。
答案 2 :(得分:1)
在ASP.NET中,存在Cache Dependency的概念。您可以在此处查看:http://www.codeproject.com/KB/web-cache/CachingDependencies.aspx或http://www.devx.com/dotnet/Article/27865/0/page/5。
此处还有企业库缓存块,可为标准内容添加一些功能:http://msdn.microsoft.com/en-us/library/ff649093.aspx
现在,如果你在.NET 4上运行,那么你应该绝对使用一个新的System.Runtime.Caching命名空间:http://msdn.microsoft.com/en-us/library/system.runtime.caching.aspx
这篇文章“使用SqlCacheDependency类在ASP.NET中缓存”非常有趣:http://msdn.microsoft.com/en-us/library/ms178604.aspx