我需要做些什么才能修复它?现在我已经创建了一个php包装器并且工作正常,但对我来说不是长期解决方案,任何帮助都将不胜感激。
答案 0 :(得分:3)
问题是memcache用于PHP的默认哈希算法与用于java的默认哈希算法不同。
您可以使用配置选项memcache.hash_function
设置PHP使用的算法(请参阅http://us2.php.net/manual/en/memcache.ini.php - 默认值为crc32)
您可以使用setHashingAlg
方法设置java使用的算法:
static {
String[] serverlist = { "cache0.server.com:12345", "cache1.server.com:12345" };
SockIOPool pool = SockIOPool.getInstance();
pool.setServers(serverlist);
pool.setHashingAlg( SockIOPool.NEW_COMPAT_HASH );
pool.initialize();
}
也会使用crc32。
(参见http://www.whalin.com/memcached/javadocs/com/danga/MemCached/SockIOPool.html - 默认为java的原生String.hashCode()
)
如果将它们设置为相同的算法,则应解决您的问题
答案 1 :(得分:0)
如果wireshark显示客户端正在发送不同的密钥,那么这不能确切地告诉您问题是什么吗?
如何使用Java中的相同密钥访问项目,而不是使用PHP,但wireshark流量显示发送了不同的密钥?你怎么知道你发送相同的密钥?是否存在您缺少的Java客户端的某种配置?