Java 不同语言的memcache客户端是否以相同的方式散列?
我们希望在Java应用程序中进行一些处理,将结果存储在memcache服务器池中,并在PHP中使用memcache将其读回 这很容易尝试,但我想我会问一下,看看是否有人做过这件事Java 不同语言的memcache客户端是否以相同的方式散列?,java,php,memcached,Java,Php,Memcached,我们希望在Java应用程序中进行一些处理,将结果存储在memcache服务器池中,并在PHP中使用memcache将其读回 这很容易尝试,但我想我会问一下,看看是否有人做过这件事 只要Java和PHP客户端都连接到同一个memcache服务器池,这两个客户端是否都会哈希到同一个服务器位置,从而可以从PHP进行检索?否。并非所有客户端的哈希方式都相同。作为证据,您将看到一些客户机提供“一致散列”,而其他客户机则不提供 简而言之,memcached客户端可以使用任何他们喜欢的哈希算法。没有官方标准
只要Java和PHP客户端都连接到同一个memcache服务器池,这两个客户端是否都会哈希到同一个服务器位置,从而可以从PHP进行检索?否。并非所有客户端的哈希方式都相同。作为证据,您将看到一些客户机提供“一致散列”,而其他客户机则不提供 简而言之,memcached客户端可以使用任何他们喜欢的哈希算法。没有官方标准
PHP客户端支持——因此可以将其配置为使用Java库使用的相同算法(看起来有几个——您使用的是哪一个?)。但显然,您需要进行大量测试。允许跨语言访问的另一种可能性是不依赖语言序列化,而是将对象存储为JSON格式的文本字符串 就我个人而言,我在PHP中使用Java和json编码、json解码
import pylibmc
mc = pylibmc.Client(["127.0.0.1"], binary=True,
behaviors={"tcp_nodelay": True,
"ketama": True})
key="someKey"
i=0
while True:
#mc.set(key, str(i))
value = mc.get(key)
print(value)
sleep(1)
i+=1
这样做对我来说似乎是个坏主意…+1个很好的问题。坏主意?一点也不。分裂语言环境是一种非常常见的情况。您能详细说明一下吗?从概念上讲,您只是从两种不同的语言将数据写入内存中的某个点。。。从两种不同的语言写入同一个数据库没有什么不同。@PAS:当使用单个memcached服务器时,应该不会有任何问题;但是,当您使用多个服务器时,通常的方法是首先对密钥执行简单的哈希来选择服务器。这允许您在服务器上分发数据和加载,而无需任何特殊代码。但这也意味着不同的客户端实现可以为同一个密钥选择不同的服务器。Javier:这正是他问这个问题的原因:)嗯,很有趣-特别是Java和PHP呢?谢谢-是的,这是问题的另一部分,但首先,您需要确保所有客户端以相同的方式散列数据,以便只存储一次数据。。我还没有尝试使用PHP memcached,但是在Java中,当你将一个对象放入缓存时,你会明确地给它一个名称,例如,如果我说一个Id为232的Person类型的对象,我会调用键“Person-232”。如果您愿意,您可以在应用程序名“YourApp-Person-232”前面加上前缀,然后用SHA1或MD5散列所有内容。下面是如何生成与PHP相同的Java SHA1: