PHP Memcached总是返回0

Abu*_*kar 6 php memcached libmemcached

memcache(安装在php5上)和memcached(通过libmemcached安装在php7.2上)都连接到同一个memcached daemon/server.

Memcache::get完全正常,并按照我的期望获取数据.但是当我这样做时Memcached::get,它总是返回0.

我已经检查过使用这两个扩展时我已经压缩了.我也尝试在Memcached::OPT_BINARY_PROTOCOLfor 之间切换memcached,它仍然产生相同的null结果.

有趣的是,当我使用memcached扩展添加键/值对并使用相同的键检索时,我得到了我添加的正确/正确的值.

我现在无能为力,因为它不适用于已经存储在memcached服务器中的数据.

编辑1:我确实telnet到我的memcached服务器,并检查它实际上有值.另外,我检查了返回的结果代码Memcached::getResultCode是不是任何一种失败.

编辑2:我可能会进一步缩小范围.我注意到,当我["key1" => "value1"]memcache-php5脚本中保存时,它会正确地存储和检索数据.但是当我尝试使用memcached-php7.1脚本检索相同的数据时,它返回0.

之后,我使用telnet从memcached服务器中删除了密钥"key1"的数据.然后我["key1" => "value1"]使用memcached-php7.1脚本保存,它可以正确检索数据.但是当尝试使用memcache-php5脚本检索它时,它会返回一些序列化数据"a:1:{s:4:\"key1\";s:6:\"value1\";}"(这是json_encoded输出)

因此,为了升级,我可能必须删除/刷新所有内容并使用memcached扩展在memcached服务器中重新创建条目.

PS:我知道这两个PHP扩展之间的差异.我已经阅读了关于这个问题的所有评论,不是我的重复.

Dio*_*llo 5

如您所知,memcachememcached是两种不同的扩展.即使它们用于相同的目的 - 连接到memcache服务器 - 它们中的每一个都以不同方式序列化数据.

这意味着如果服务器或独立服务器实例中没有正确的缓存刷新,则无法在它们之间进行安全切换.

<?php
$memcache = new Memcache;
$memcacheD = new Memcached;
$memcache->addServer($host);
$memcacheD->addServers($servers);

$checks = array(
    123,
    4542.32,
    'a string',
    true,
    array(123, 'string'),
    (object)array('key1' => 'value1'),
);
foreach ($checks as $i => $value) {
    print "Checking WRITE with Memcache\n";
    $key = 'cachetest' . $i;
    $memcache->set($key, $value);
    usleep(100);
    $val = $memcache->get($key);
    $valD = $memcacheD->get($key);
    if ($val !== $valD) {
        print "Not compatible!";
        var_dump(compact('val', 'valD'));
    }

    print "Checking WRITE with MemcacheD\n";
    $key = 'cachetest' . $i;
    $memcacheD->set($key, $value);
    usleep(100);
    $val = $memcache->get($key);
    $valD = $memcacheD->get($key);
    if ($val !== $valD) {
        print "Not compatible!";
        var_dump(compact('val', 'valD'));
    }
}
Run Code Online (Sandbox Code Playgroud)