2012-01-05 52 views
1

我们有2个应用程序服务器(coldfusion/Java)和一个memcached。 我想设置我的memcached服务器/客户端。当服务器1为键添加值时,它也应该可用于服务器2.并且以相反的方式。许多客户端的一个Memcached服务器

现在,当我对服务器1键增加价值它不是第二个服务器上可读或可编辑的。 如何设置它

我使用spymemcached作为客户端库。

感谢您的帮助

+0

首先,我想指出,双方Memcached和spymemcached是非常可靠的,每天使用的成千上万的人。你也试图做一些非常基本的事情,在测试过程中很容易被捕获,或者使用spymemcached或memcached,这导致我相信你的代码中存在一个错误。你能在这里发布代码吗?另外,如果您使用的是2.7系列的spymemcached,您可以调用Future中的getStatus()函数返回给您,以查看请求中是否有错误。 – mikewied 2012-01-06 18:21:44

回答

0

一切都在正确的方式设定,但是设定的复数值(结构或阵列)由这些键/值对其他服务器不可用。 现在我将我的所有值序列化为JSON并且工作正常。也许在Memcached 1.4.5版本中,它被改变了,但是对于版本1.2.6,序列化值是修复它的好方法。

<!--- Setting up Memcached Client ---> 
<!--- Add code in OnApplicationStart in Application.cfc ---> 
<cfset AU = createObject("java", "net.spy.memcached.AddrUtil").init() /> 
<cfset Application.MemCacheD = createObject("java", "net.spy.memcached.MemcachedClient").init(AU.getAddresses("127.0.0.1:11211")) /> 
<!--- Adding values: ---> 
<cfset memCacheName = "myKey" /> 
<cfset myValue = StructNew() /> 
<cfset myValue['var1'] = 'var1 value' /> 
<cfset Application.MemCacheD.add(memCacheName, 3600, serializeJSON(myValue)) /> 
<!--- Getting values: ---> 
<cfset memCacheName = "myKey" /> 
<cfset MemCachedRet = Application.MemCacheD.get(memCacheName) /> 
<cfif isDefined('MemCachedRet')> 
    <!--- value is available from mamcached ---> 
<cfelse> 
    <!--- get value from db and save to memcached ---> 
</cfif> 
0

或者:

答:您不使用服务器1和服务器2相同的对象相同的密钥。

OR

B.你不是说要同memcached的实例服务器1和服务器2

OR

C.你给了这么短的寿命,它过期的对象在其他服务器可以利用它之前。

+0

A - 密钥相同B - 只有一个memcache C实例 - 寿命为3600,并且值在第一台服务器上可用 – Bonanza 2012-01-05 18:58:45

+0

我声称存在某处的错误。假设你正在使用Memcached和Spymemcached的稳定版本,这并没有留下太多的摆动空间。我会退后一步,回到基础。用一个插入/检索值的main创建一个简单的Java类。在不同的机器上运行它以确保它能正常工作。使用Wireshark绝对确保您传递的是同一个密钥。使用可用于memcached的命令行工具来检查内容。例如,从两台服务器插入相同的值并运行“统计信息项目”。它有1个键还是2个? – rfeak 2012-01-05 19:09:58

+0

只有一个ke,现在'测试'。我在一台服务器上插入值,另一台服务器上的值是'未定义的'。当我尝试使用其他服务器上的ADD覆盖它时,我收到状态'OperationStatus成功= false:NOT_STORED'。 – Bonanza 2012-01-05 19:17:43

0

它看起来就像是一个相当年轻的Memcached实现,这可能是一个错误。您可能想要在此处提交它:http://code.google.com/p/spymemcached/issues/list

如果您不认为这是一个错误,您可以发布调用Memcached的代码片段吗?

另外,请记住,memcached的应被视为不可靠和非持久性存储。您应该编写代码,就好像您期望它停止一样,甚至可能会返回空结果。

+0

这可能是memcached引擎旧版本中的错误吗?我在Windows下使用它,只有我发现的工作版本是1.2.4(如果我记得不错) – Bonanza 2012-01-05 19:00:52