注意:最近我被分配的任务是从 PECL memcache 迁移到 PECL memcached,并遇到了一个主要问题——memcache 和 memcached 以不同的方式序列化数据,这意味着使用一个库写入的数据不一定能被另一个库读取。
例如,如果您使用 memcache 写入对象或数组,则 memcached 会将其解释为整数。如果您使用 memcached 写入它,则 memcache 会将其解释为字符串。
简而言之 - 您不能在 memcache 和 memcached 之间安全地切换,除非进行缓存刷新或隔离的缓存环境。
<?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 "正在使用 Memcache 进行写入检查\n";
$key = 'cachetest' . $i;
$memcache->set($key, $value);
usleep(100);
$val = $memcache->get($key);
$valD = $memcacheD->get($key);
if ($val !== $valD) {
print "不兼容!";
var_dump(compact('val', 'valD'));
}
print "正在使用 MemcacheD 进行写入检查\n";
$key = 'cachetest' . $i;
$memcacheD->set($key, $value);
usleep(100);
$val = $memcache->get($key);
$valD = $memcacheD->get($key);
if ($val !== $valD) {
print "不兼容!";
var_dump(compact('val', 'valD'));
}
}