很久以前我写过一篇关于DotNetNuke 5中的缓存增强和最近的一篇博客文章一位卖家关于使用自定义模块中的DotNetNuke缓存促使我重新审视我的旧职位。
在他精彩的文章中,Mitchel描述了一种从DotNetNuke . common . utilities中一些可用方法中抽象出来的方法。Datacache类。这确实是简化在您自己的模块中使用DotNetNuke实体缓存的好方法。
这些基本方法有一点不太好,那就是它们不适合在高流量应用程序中使用。加上了DataCache的。GetCache方法本身不是线程安全的。请记住,在DotNetNuke 4.9的“旧”日子里,相当多的站点因此有缓存问题。使用此缓存模式的另一个原因是,它还允许您非常容易地设置缓存超时和缓存优先级。
在DotNetNuke 5中引入的缓存模式已经针对性能和线程安全进行了增强和优化。其中一个增强是现在还支持缓存字典。
在重读我以前的博客文章时,我意识到如何在自己的代码中使用这种模式仍然不是很清楚。它缺少一个简单的例子。因此,在反弹中,我将指出Core中的另一个更简单的示例,并展示如何在新版本的announcement模块中使用此缓存模式的示例。
让我们首先看看核心用来检索门户的所有页面的方法,dotnetnuker . entities . tabs . tabcontroller . gettabsbyportal:

以及相应的回调方法:

正如您所看到的,这也非常易于使用。在后端是CBO。GetCachedObject调用DataCache。GetCachedData,你可以从你的代码中直接调用它。然而,CBO(代表自定义业务对象)的架构方式是DotNetNuke自己的对象工厂。这个类有各种方便的方法来帮助创建对象。因此,使用相同的对象工厂从缓存中检索对象是有意义的。
在即将到来的announcement模块版本中,缓存将是重点关注的内容之一,特别是因为当前版本存在一些奇怪的缓存问题。该模块的新版本必须跟踪公告模块中单个条目的URL,以便能够生成适当的ATOM提要(该模块将同时支持RSS和ATOM提要)。一种选择是将该URL存储在数据库中,但是当模块移动到另一个页面时,这会导致问题。我决定将其作为一个计算字段,但是,由于该计算不是很有效,因此需要缓存计算结果。

在这种情况下,只有当数据不在缓存中时才调用PermalinkCallback方法,在所有其他情况下,该值以线程安全的方式从数据缓存中加载。
如果您的自定义代码不使用缓存,那么开始尝试使用它将是一个非常好的主意。DotNetNuke使您可以很容易地开始使用缓存,并且可以很好地从一个好的缓存模式的内部工作中抽象出来。
这篇文章是交叉张贴从我的个人博客。