Microsoft Enterprise Library 5.0 Integration Pack for Windows Azure
据我了解,缓存将存储在数据库中,并且所有Web角色都共享相同的缓存,这与Azure的内存中分布式缓存相同。
我想知道有人在Windows Azure上成功使用了缓存应用程序块而不是Azure缓存。
如果是这样,速度如何?与Azure缓存有任何明显不同。
感谢您的评论!
答案 0 :(得分:3)
不推荐使用缓存应用程序块(see here)。它由System.RunTime.Caching命名空间替换。但是,SQL Azure不支持SqlDependency,因此您不能将缓存命名空间用于数据库驱动的缓存。
因此,您的选择归结为:通过自己阅读SQL Azure,使用Windows Azure缓存或者只是根据需要从SQL Azure读取来实现您自己的本地缓存。
本地缓存的性能会更好,因为它是......本地:)。后台线程(您需要编写)将在特定频率上刷新缓存。因此,访问本地缓存将以内存访问速度进行。但是......它不会在Windows Azure节点上完美同步,因为每个节点都有自己的缓存。要解决此问题,您可以在所有节点上同时完成刷新逻辑的编码。
从Azure缓存中读取将比访问本地缓存更慢,但所有Windows Azure节点都可以同时访问相同的数据。您仍然需要构建一个线程,以便在特定频率上更新Windows Azure缓存;它不会自动刷新。
警告:请记住,如果您事先知道密钥/值对缓存条目的密钥,Azure缓存就可以正常运行。换句话说,您无法从Azure缓存中获取密钥列表。例如,如果您存储邮政编码/温度列表,则邮政编码将是您的密钥(这是一个已知的集合)。因此,您可以将Azure Cache用于此目的。 Azure缓存旨在帮助存储ASP.NET会话状态,该状态还具有已知密钥(会话ID)。
最后,将数据保存在SQL Azure(或其他商店,如Azure表)中也可以很好地工作。但是,这取决于您获得的流量以及您从数据源读取的次数。请记住,在某些情况下,构建缓存机制比必要的工作更多。
答案 1 :(得分:1)
我对企业库不太熟悉。但Windows Azure缓存将缓存数据存储在远程服务器的内存中。当我们请求缓存数据时,我们发出Web请求,服务器将从其内存中返回数据。如果缓存服务器和我们的Windows Azure服务器位于同一数据中心(这是推荐的做法),则Web传输速度非常快。如果我们使用SQL Azure来存储缓存数据,则数据从SQL Azure服务器传输到Windows Azure服务器大约需要相同的时间。但是,与从缓存服务器的内存中查询数据相比,查询数据库中的数据需要更长的时间。 SQL Azure可以进行一些优化以增加数据访问,例如,将数据缓存在内存中。但在这种情况下,建议您使用Windows Azure缓存而不是SQL Azure。
最诚挚的问候,
徐明。答案 2 :(得分:1)
缓存应用程序块不提供分布式缓存所需的功能。相反,您应该考虑使用以下技术之一:
与SQL Azure兼容并且是高速缓存数据库提供程序所需的SQL脚本可单独下载。要获取脚本,请从Microsoft Enterprise Library 5.0 Integration Pack for Windows Azure下载EnterpriseLibraryIntegrationPack-WindowsAzure-sqlscripts.exe。
有关在Windows Azure应用程序中使用其他经典Enterprise Library块的信息,请参阅this white paper。