0

适用于 Windows Azure 的 Microsoft Enterprise Library 5.0 集成包

据我了解,缓存将存储在数据库中,并且所有 Web 角色都共享相同的缓存,这与 Azure 的内存中分布式缓存相同。

我想知道是否有人在 Windows Azure 上成功使用了缓存应用程序块,而不是 Azure 缓存。

如果有,速度如何?任何与 Azure 缓存明显不同的地方。

感谢您的评论!

4

3 回答 3

3

不推荐使用缓存应用程序块(请参见此处)。它被System.RunTime.Caching命名空间取代。但是,SQL Azure 不支持 SqlDependency,因此您也不能将缓存命名空间用于数据库驱动的缓存。

因此,您的选择归结为:通过自己从 SQL Azure 读取来实现您自己的本地缓存,使用 Windows Azure 缓存,或者只是按需从 SQL Azure 读取。

本地缓存的性能会更好,因为它是...本地的:)。后台线程(您需要编写)将以特定频率刷新您的缓存。因此访问本地缓存将以内存访问速度进行。但是......它不会在您的 Windows Azure 节点之间完美同步,因为每个节点都有自己的缓存。要解决此问题,您可以对刷新逻辑进行编码,使其在所有节点上同时完成。

从 Azure 缓存读取比访问本地缓存要慢,但所有 Windows Azure 节点都可以同时访问相同的数据。您仍然需要构建一个线程,以特定频率更新 Windows Azure 缓存;它不会自动刷新。

警告:请记住,如果您事先知道键/值对缓存条目的键,Azure 缓存会很好地工作。换句话说,您无法从 Azure 缓存中获取密钥列表。例如,如果您存储邮政编码/温度列表,则邮政编码将是您的密钥(这是一个已知集合)。因此,您可以为此目的使用 Azure 缓存。Azure 缓存旨在帮助存储 ASP.NET 会话状态,该状态也具有已知密钥(会话 ID)。

最后,将您的数据保存在 SQL Azure(或其他存储,如 Azure 表)中也可以很好地工作。但是,这取决于您获得多少流量以及您将从数据源读取多少次。请记住,在某些情况下,构建缓存机制是多余的工作。

于 2012-05-11T12:36:04.947 回答
1

我对企业库不是很熟悉。但是 Windows Azure 缓存将缓存数据存储在远程服务器的内存中。当我们请求缓存的数据时,我们会发出一个 Web 请求,服务器将从其内存中返回数据。如果缓存服务器和我们的 Windows Azure 服务器在同一个数据中心(这是推荐的做法),那么 Web 传输速度非常快。如果我们使用 SQL Azure 来存储缓存数据,数据从 SQL Azure 服务器传输到我们的 Windows Azure 服务器大约需要相同的时间。但与从缓存服务器的内存中查询数据相比,从数据库中查询数据需要更长的时间。SQL Azure 可能会做一些优化来增加数据访问,例如,将数据缓存在内存中。但在这种情况下,建议您使用 Windows Azure 缓存而不是 SQL Azure。

最好的祝福,

明旭。

于 2012-05-11T09:04:31.370 回答
1

缓存应用程序块不提供分布式缓存所需的功能。相反,您应该考虑使用以下技术之一:

与 SQL Azure 兼容且缓存数据库提供程序所需的 SQL 脚本可单独下载。要获取脚本,请从Microsoft Enterprise Library 5.0 Integration Pack for Windows Azure下载 EnterpriseLibraryIntegrationPack-WindowsAzure-sqlscripts.exe 。

有关在 Windows Azure 应用程序中使用其他经典企业库块的信息,请参阅此白皮书

于 2012-05-12T14:48:40.470 回答