注意:最近我被指派將 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'));
}
}