Python脚本能从memcache获取值,PHP脚本却返回空结果
我运行了一个Python脚本,用来缓存一些数据。
self.cache.set('test', 'my sample data', 300)
data = self.cache.get('test')
self.p(data)
这个程序会打印出“我的示例数据”... 一切都很好,但当我尝试从PHP访问这个键时,
$data = $this->cache->get('test');
print_r($test);
我只得到空结果。于是我检查了服务器的状态。
$list = array();
$allSlabs = $this->cache->getExtendedStats('slabs');
$items = $this->cache->getExtendedStats('items');
foreach($allSlabs as $server => $slabs) {
foreach($slabs AS $slabId => $slabMeta) {
$cdump = $this->cache->getExtendedStats('cachedump',(int)$slabId);
foreach($cdump AS $server => $entries) {
if($entries) {
foreach($entries AS $eName => $eData) {
$list[$eName] = array(
'key' => $eName,
'server' => $server,
'slabId' => $slabId,
'detail' => $eData,
'age' => $items[$server]['items'][$slabId]['age'],
);
}
}
}
}
}
ksort($list);
print_r($list);
发现这个键“test”确实存在... 但我就是无法访问它。
如果我在PHP中缓存一些东西,每次都能得到结果,但不知为什么这个Python和PHP的缓存组合就是不管用。
如果有人知道问题出在哪里,请给我点建议... 我已经尝试了所有方法。
1 个回答
2
可能是PHP和Python之间的哈希值不匹配吧?这里有个解决办法:http://www.ruturaj.net/python-php-memcache-hash
在你的Python脚本中添加以下内容,以改变哈希值的计算方式……
import memcache
import binascii
m = memcache.Client(['192.168.28.7:11211', '192.168.28.8:11211
', '192.168.28.9:11211'])
def php_hash(key):
return (binascii.crc32(key) >> 16) & 0x7fff
for i in range(30):
key = 'key' + str(i)
a = m.get((php_hash(key), key))
print i, a