2

我正在寻找一种简单的方法来实现可在 Azure .NET 实例上使用的本地内存存储

我一直在研究Azure Co-located Caching,它似乎支持我的所有要求:

  1. 同时处理 Web 角色和辅助角色

  2. 实现一个简单的 LRU

  3. 将缓存对象保存在内存 (RAM) 中

  4. 允许我将缓存大小定义为机器总 RAM 的百分比

  5. 将缓存保持在 web/worker 角色的同一台机器上(并置模式)

  6. 允许我从运行在同一台机器上的多个 AppDomain 访问相同的缓存(Web 角色可能会将我的处理程序拆分为不同的 AppDomain)

Azure Co-located 缓存的唯一问题是不同的实例进行通信并尝试共享它们的缓存——我真的不需要所有这些。

我希望每台机器都有自己独立的内存缓存。当我查询这个缓存时,我不想浪费任何时间向其他实例的缓存发出网络请求。

本地缓存配置?

我在 Azure 缓存中看到了一个启用本地缓存的配置设置——但看起来机器仍然可以相互通信(即在缓存未命中期间)。此配置还需要一个ttlValue并且objectCount我希望 TTL 为“永远”并且对象计数为“直到你填满整个缓存”。感觉maxInt在这两种情况下都指定似乎是错误的。

一个简单的静态变量呢?

当我真正考虑它时,所有这些 Azure 缓存对于我需要的东西来说似乎有点矫枉过正。我基本上只需要应用程序/角色级别的静态变量.. 除非这不适用于要求 #6(不同的 AppDomains)。在这种情况下,要求 #4 也更难实现。

内存缓存

我认为老好人memcached似乎完全按照我的意愿行事。问题是我将 Azure 用作 PaaS,我真的不想管理自己的 VM。我不认为我可以memcached在我的角色上安装.. [更新] 似乎可以在我的角色上本地运行 memcached。有没有更优雅的“原生”解决方案而不使用 memcached 本身?

4

2 回答 2

1

您当然可以在 Web 和 Worker 角色上安装 memcached。几年前,在虚拟机功能出现之前,Steve Marx就在 Azure 云服务上运行了 memcached 。这是一篇较旧的帖子,因此您可能会遇到其他处理方式,例如使用启动任务而不是 RoleEntryPoint 中的 OnStart 方法等。

于 2013-08-18T16:20:13.430 回答
0

我已经使用 SQL Server 的“免费”版本进行本地缓存,它们运行良好。这取决于你在做什么,但我已经运行了 SQL Server Express/Compact 来存储我编写的梦幻足球网站的整个小型静态数据集,其中包括 5 年的统计数据。由于占用空间小,它们即使在中小型 Azure 实例上也能很好地工作。

http://blogs.msdn.com/b/jerrynixon/archive/2012/02/26/sql-express-v-localdb-v-sql-compact-edition.aspx

最好的部分是你可以使用 t-sql。您的缓存要求可能更复杂或无法扩展到此。

于 2013-08-20T04:39:25.780 回答