2009-09-24 6 views
0
  1. l'élément est json sérialisé et non binaire donc il est lisible.
  2. Je reçois problème en essayant d'obtenir l'élément, avec php la clé fonctionne très bien, mais quand j'accéder à l'élément en utilisant même clé en Java, il échoue
  3. Je n'ai qu'un serveur pour le hachage du serveur ne doit pas être aproblem
  4. Je l'ai fait une analyse de Wireshark et semble être d'aucun secours, sauf que: clients java et php sont à la recherche des clés différentes.

Que dois-je faire pour le réparer? Pour l'instant j'ai créé un wrapper php et fonctionne bien mais n'est pas une solution à long terme pour moi, toute aide serait appréciée.comment accéder à l'élément memcache créé en php à partir de Java

+0

Comment sont vos clients java et php la recherche à différentes clés? (ils ne devraient pas) Pourriez-vous fournir des exemples de noms de clés? –

Répondre

0

Si Wireshark montre que les clients envoient des clés différentes, ne pas vous dire exactement quel est le problème?

Comment se fait-il que vous accédiez à l'élément avec la même clé en Java qu'en PHP mais le trafic wireshark montre qu'une clé différente est envoyée? Comment savez-vous que vous envoyez la même clé? Y a-t-il une sorte de configuration pour le client Java qui vous manque?

+0

Oui et c'est ce que j'ai demandé comment y remédier. En tout cas la solution proposée par DanSingerman fonctionne mais il y a des pannes intermittentes. Toutes les façons merci beaucoup de m'aider à ce sujet, cela a résolu un grand mal de tête pour moi, je vous tiendrai au courant avec plus d'informations sur les échecs intermittents. –

3

Le problème est l'algorithme de hachage par défaut que memcache utilise pour PHP diffère de celui utilisé pour Java.

Vous pouvez définir le PHP algorithme utilise avec l'option de configuration memcache.hash_function (voir http://us2.php.net/manual/en/memcache.ini.php - la valeur par défaut est crc32)

Vous pouvez définir le java algorithme utilise la méthode setHashingAlg:

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();  
     } 

fera il utilise aussi crc32.

(voir http://www.whalin.com/memcached/javadocs/com/danga/MemCached/SockIOPool.html - valeur par défaut est natif de Java String.hashCode())

Si elles sont réglées sur le même algorithme, votre problème devrait être résolu

Questions connexes