我们有2个应用程序服务器(coldfusion / Java)和一个memcached。 我想像那样设置我的memcached服务器/客户端。当服务器1为密钥添加值时,它也应该对服务器2可用。反之亦然。
现在,当我在服务器1上为密钥添加值时,它在第二台服务器上是不可读或可编辑的。 如何设置
我使用spymemcached作为客户端库。
感谢您的帮助
答案 0 :(得分:0)
或者:
一个。您没有为同一对象使用服务器1和服务器2的相同密钥。
OR
B中。您没有与服务器1和服务器2的相同memcached实例进行通信
OR
℃。在其他服务器可以利用它之前,它对它过期的对象给出了如此短的寿命。
答案 1 :(得分:0)
看起来这是一个相当年轻的Memcached实现,这可能是一个错误。您可以在此处提交:http://code.google.com/p/spymemcached/issues/list
如果您认为这不是一个错误,您是否可以发布一段代码来调用Memcached?
另外,请记住,memcached应被视为不可靠和非持久存储。你应该编写你的代码,好像你预期的那样下降,甚至可能会返回空的结果。
答案 2 :(得分: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>