Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.Net:具有多个接口的数据层缓存_.net_Caching - Fatal编程技术网

.Net:具有多个接口的数据层缓存

.Net:具有多个接口的数据层缓存,.net,caching,.net,Caching,我有一个业务对象项目和一个数据层,可以在多个接口(网站、web服务、控制台应用程序等)中实现 我的问题是如何在处理数据检索的方法中正确实现缓存。我将使用SqlCacheDependency来确定缓存对象何时需要过期,但我不确定实现缓存本身的最佳方式: 如果库用于web项目,我想使用HttpRuntime.Cache;然而,我猜这将是一个问题的控制台应用程序 如果允许这样的多种接口类型,在.Net项目的数据层中实现缓存的最佳方法是什么 我过去看到的通常是数据/表示层之间的中间层,这些层为特定缓存存

我有一个业务对象项目和一个数据层,可以在多个接口(网站、web服务、控制台应用程序等)中实现

我的问题是如何在处理数据检索的方法中正确实现缓存。我将使用SqlCacheDependency来确定缓存对象何时需要过期,但我不确定实现缓存本身的最佳方式:

如果库用于web项目,我想使用HttpRuntime.Cache;然而,我猜这将是一个问题的控制台应用程序


如果允许这样的多种接口类型,在.Net项目的数据层中实现缓存的最佳方法是什么

我过去看到的通常是数据/表示层之间的中间层,这些层为特定缓存存储实现缓存

在asp.net网站上,我展示了我过去看到的体系结构的一些概述


这里最重要的是,你的目标是正确的,因为你的选择对每个目标都不一样,因此,试图获得一个全面可行的方法将被证明是一个具有挑战性的前景,很可能会导致使用不太完美的方法来达成妥协。

如果您使用的是.net 4.0,您应该查看命名空间中的。这是添加到.net 4.0中的,专门用于解决非ASP.net应用程序没有缓存API,或者必须附带对System.Web的依赖项并使用HttpRuntime.Cache这一事实。或者,您可以研究AppFabric缓存,它与客户端无关,但可能会带来您不想处理的开销

如果您使用的是早期版本的.net,那么您可能会发现最简单的方法是咬紧牙关,接受对System.Web的依赖,然后您可以随时随地使用HttpRuntime.Cache—这不是一个完美的解决方案,但它具有一致性的优点。另一种选择是查看,它同样与客户端无关,但不建议在有HttpRuntime功能的web应用程序中使用。

添加缓存层

可以在每个不同的数据层实现中实现缓存,也可以节省大量工作,只需在数据层上方的单独层中实现缓存,因此只需执行一次。这还有一个额外的好处,即您将缓存数据传输对象,而如果您将缓存放在th DL中,则可能会犯缓存原始数据的错误,这意味着您将在每次访问缓存时将其转换为DTO

一个重要的目标是使缓存层与常规的未缓存数据层具有完全相同的接口。如果你能做到这一点,那么缓存就变成了可选的——缓存看起来就像任何其他DL实现一样——而上层对此一无所知。这可能很棘手,但它的回报是好的

因此:


[各种DL实现]-[DL接口]-[caching layer]-[DL接口]-[higher layers]

我刚刚意识到SqlCacheDependency类在System.Web中,所以在这种情况下,不管怎样,我都需要它;我只是担心HttpRuntime.Cache是否能在IIS之外工作,但听起来会。现在,我只需要确定确保在这些接口中调用之前启动SqlCacheDependency订阅的最佳方法。谢谢