【问题标题】:How can I use memcached (Amazon elasticache) from both scala and rails simultaneously?如何同时从 scala 和 rails 使用 memcached (Amazon elasticache)?
【发布时间】:2015-04-11 09:14:23
【问题描述】:

我正在尝试让 scala 客户端和 rails 客户端与同一个 aws memcached 集群通信。我正在使用的 scala/java 客户端是 spy.memcached,而似乎为 aws 提供最佳支持的 ruby​​ gem 是 dalli。不幸的是,给定相同的服务器,它们通常将相同的密钥存储在不同的服务器上。

有谁知道让这两者无缝互操作的简单方法(不重写哈希函数)?

【问题讨论】:

  • 你使用configuration endpoint还是node endpoints
  • 配置端点,但它们最终都返回一个服务器列表,我检查它们的顺序相同。
  • 来自 scala:scala> cl.getAvailableServers res1: java.util.Collection[java.net.SocketAddress] = [/10.0.0.119:11211, /10.0.0.145:11211, /10.0.0.202:11211, /10.0.0.152:11211] 来自 ruby​​:irb(main):007:0> cl.servers => ["10.0.0.119:11211", "10.0.0.145:11211", "10.0.0.202:11211", "10.0.0.152:11211"] 从 scala,我调用 cl.set("1", "one")cl.set("2", "two")。从 ruby​​ 中,只显示其中一个(例如,cl.get("2")nil)。

标签: ruby scala amazon-web-services memcached


【解决方案1】:

最简单的方法是在集群中只使用一个节点。

第二个选项:为所有节点设置相同的 key=>value 并从任何节点读取。

第三个选项(额外编码):使用名为 dalli-elasticache 的 gem 用于 ruby​​ on rails 并为 scala 实现相同的节点检测算法。基本上你需要修改包含节点信息的键名。

【讨论】:

  • 节点检测很好——它们都得到了相同的服务器环。我最终挖掘了更多,发现 dalli 使用 crc32 作为基本哈希,而 spy.net.memcached 使用 md5。会尝试修复,如果我这样做了,会报告。
猜你喜欢
  • 1970-01-01
  • 2020-04-09
  • 2014-11-03
  • 2019-09-20
  • 2019-09-12
  • 2015-09-21
  • 2014-12-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多