在Azure实例上实现简单的本地内存缓存

时间:2013-08-18 15:47:16

标签: c# .net caching azure azure-caching

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

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

  1. 同时处理网络角色和工作人员角色

  2. 实施简单的LRU

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

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

  5. 将缓存保留在Web /辅助角色的同一台计算机上(共存模式)

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

  7. 我在Azure Co-located缓存中遇到的唯一问题是不同的实例进行通信并尝试共享其缓存 - 我并不是真的需要这一切。

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

    本地缓存配置?

    我在Azure缓存中看到了一个配置设置以启用Local Cache - 但似乎机器可能会相互通信(即在缓存未命中期间)。此配置还需要ttlValueobjectCount,我希望TTL“永远”,并且对象计数为“直到您填满整个缓存”。感觉就像在两种情况下指定maxInt似乎都是错误的。

    简单的静态变量怎么样?

    当我真的想到它时,所有这些Azure缓存对于我需要的东西来说似乎有些过分。我基本上只需要在应用程序/角色级别中使用静态变量..除了对于需求#6(不同的AppDomain)不起作用。在这种情况下,要求#4也有点难以实现。

    Memcached的

    我认为好老memcached似乎完全符合我的要求。问题是我使用Azure作为PaaS,我真的不想管理我自己的VM。我不认为我可以在我的角色上安装memcached .. [更新]似乎可以在我的角色上本地运行memcached。是否有更优雅的“本机”解决方案而不使用memcached本身?

2 个答案:

答案 0 :(得分:1)

您当然可以在Web和Worker角色上安装memcached。史蒂夫马克思几年前在虚拟机功能出现之前发表了getting memcached running on Azure Cloud Service的博文。这是一篇较旧的帖子,因此您可能会遇到其他处理方法,例如使用start up tasks而不是RoleEntryPoint中的OnStart方法等。

答案 1 :(得分: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。您的缓存要求可能更复杂或无法扩展到此。