使用AWS Elasticache的NHibernate memcached二级缓存的问题

时间:2013-03-11 12:53:12

标签: c# nhibernate amazon-web-services memcached amazon-elasticache

我使用memcached作为我的NHibernate二级缓存。我正在将我的系统移动到Amazon Web Services并计划使用完全兼容Memcache的Elasticache。 Memcached使用一组主机IP地址(注意:不是主机名 - 如果检测到无效的IP字符串,则库会抛出错误)以连接到memcached服务器。以下是配置字符串示例:

  <memcache>
    <memcached host="192.168.1.1" port="11211" expiration="300" />
  </memcache>
另一方面,

Elasticache为缓存集群提供静态主机名,不建议使用内部IP地址,因为这些地址容易发生变化。

有没有人能够在Elasticache中使用NHibernate memcached提供程序?是否有其他方法可以使用NHibernate配置memcached,使其使用主机名而不是IP地址?

谢谢

JP

4 个答案:

答案 0 :(得分:4)

对于任何感兴趣的人:我无法使用NHibernate.Caches.MemCache指向主机名。然而,事实证明NHibernate有一个备用的memcache实现 - NHibernate.Caches.EnyimMemcached。这允许服务器由IP地址或主机名定义,解决了我的问题。我仍然有兴趣听说 是否可以使用旧的Memcache集成来实现,但事情与EnyimMemcached很好地配合

答案 1 :(得分:1)

如果有人仍在寻找解决方案,

您可以使用https://github.com/henriquecampos/NHibernate.Caches.Elasticache以极少的配置连接到Amazon Elastic Cache。

同样对于本地开发,您可以使用以下项目 https://github.com/hybridtechie/fake-elasticache-.NET-version

答案 2 :(得分:0)

您是否可以使用host属性并将其设置为ElastiCache提供的DNS名称,而不是在配置文件中使用hostname属性?

即:

<memcached hostname="simcoprod02.m2st2p.fsw4.use1qa.cache.amazonaws.com" port="11211" expiration="300" />

答案 3 :(得分:-1)

这是一个问题 主机名(由amazon,amazon-XXXX提供的主机名)不适用,因为它们未映射到任何域。

内部ips之间的路由似乎也不可能,您可以尝试跟踪它到处都是。唯一的方法是使用面向外部的弹性ips,

路由到映射到亚马逊的cnames似乎也不可能

你可以尝试提交反向dns映射请求(在amazon faq上),或者设置辅助dns请求(免责声明,我没有尝试过两者,我使用弹性ip进行映射,不得不转向更紧急的事情)