如何从java访问php中创建的memcache项目

时间:2009-09-24 16:19:19

标签: java php memcached

  1. item是json序列化而非二进制,因此它是可读的。
  2. 我在尝试获取项目时遇到问题,使用php,密钥工作正常但是当我在java中使用相同的密钥访问项目时它失败
  3. 我只有一台服务器,因此服务器散列不应该是aproblem
  4. 我做了一个wirehark分析,似乎没有任何帮助,除了: java和php客户端正在寻找不同的密钥。
  5. 我需要做些什么才能修复它?现在我已经创建了一个php包装器并且工作正常,但对我来说不是长期解决方案,任何帮助都将不胜感激。

2 个答案:

答案 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客户端的某种配置?