2010-11-29 82 views
0

我對memcached感到失望。使用它遠非易事。爲什麼memcache的php擴展(或memcached)如此不可靠?

一個例子:

$memcache = new Memcache; 
$memcache->connect('127.0.0.1', 11211) or die ("Could not connect"); 

$memcache->set('id', $array, 120); 

我一個小時前設置此有關 - 這是仍然存在!手冊上說可以使用「從當前時間開始的秒數」作爲參數。那麼爲什麼會忽略失效?

另一件讓我感到困惑的事情是,有時候值不寫。這一切都是隨機的。 「argyleblanket」提到在php手冊中遇到這些問題: http://www.php.net/manual/en/memcache.set.php#84032 我已經在我所有的replace()調用中實現了這種回退。我不明白爲什麼它不會在第一個電話上工作。爲什麼提供一個replace()函數,如果它在星號中,如果它替換了內容?

問題是爲什麼我會信任這樣的軟件來做任何重要的事情,並且有沒有辦法讓它更可靠?

+1

這是一個多麼可怕又滔滔不絕的問題。當您未能閱讀您所使用的方法的簽名時,簡單地假設該軟件不可靠。 – Evert 2012-09-11 14:38:00

回答

7

您使用的語法錯誤。第三個參數是壓縮標誌。

製作一個簡單的界面,如下所示。它可以幫助你:

/* defines params */ 
define('MEMCACHED',  1); 
define('CACHE_DEFAULT_EXPIRE', 3600); 

if(MEMCACHED) if(! class_exists('memcached')) die('memcache not loaded'); 

/* Cache */ 
if(MEMCACHED) { 
    global $memcache; 
    $memcache = new Memcache(); 
    $memcache->connect('127.0.0.1', 11211); 
} 

function cacheSet($key, $var, $expire=NULL) { 
    if(!MEMCACHED) return 0; 
    global $memcache; 
    if(!$expire) $expire = CACHE_DEFAULT_EXPIRE; 
    $key = md5($key); 
    return $memcache->set($key, $var, false, $expire); 
} 

function cacheGet($key) { 
    if(!MEMCACHED) return 0; 
    global $memcache; 
    $key = md5($key); 
    return $memcache->get($key); 
} 
+0

謝謝。也許它顯示了意想不到的結果,因爲我沒有使用正確的語法。 – user478419 2010-11-30 19:36:17

5

第三個參數是Memcache::set$標誌,不$到期$到期是第四個:

$memcache = new Memcache; 
// add server, etc. 
$memcache->set('foo', 'bar', 0, 5); // 5 seconds expiry 
var_dump($memcache->get('foo')); // bar 
sleep(6); 
var_dump($memcache->get('foo')); // false 

你正在使用的語法爲Memcached類,而不是Memcache

至於你的set/replace問題,我無法在PHP 5.3.3上使用Memcache或Memcached來重現此問題。

此外,在我看來,你應該去爲PECL memcached擴展。它提供了更多的功能,並直接使用libmemcached,所以它也應該更高效。

+0

「第二個參數」也許你的意思是第三個參數? – Powerlord 2010-11-29 15:49:09

相關問題