2014-08-29 122 views
0

我與Laravel使用Memcached時有一個奇怪的問題。在我的本地環境中,我使用Windows,並且因爲沒有適用於Windows的Memcached,所以我在本地使用文件緩存驅動程序。對於生產服務器,我們安裝了Memcached,並使用不同的配置並使用Memcached驅動程序。代碼是一樣的。這是我與Memcached的問題。下面是一個簡單的代碼:與Memcached Laravel緩存問題

$cacheKey = "test_key";  
$hasCache = Cache::has($cacheKey); 
$value = ""; 

if($hasCache) 
{ 
    $value = Cache::get($cacheKey); 
} 

$isAdded = Cache::add($cacheKey, "test_value", 60); 

$ isAdded始終是真實的(它應該是真實的,只有第一次),所以添加了緩存,但$ hasCache永遠是假,$值始終是空的。這就像它被添加到緩存後立即刪除值

本地它工作正常,問題只出現在生產服務器上。沒有例外拋出。我嘗試切換到生產服務器上的文件驅動程序,它的工作原理應該如此,所以問題在於memcached驅動程序。

我有很難調試這一點,所以如果任何人有類似的問題,我會很感激的幫助:)

回答

1

在你的情況出現,當然,你永遠有$idAdded == true有,無所謂如果您有$value = ""$value = "test_value",您仍然爲該密鑰分配一個值。

我也遇到了Memcached和Laravel的一些問題,但我認爲這更多是因爲我對Memcached一無所知。

但是,我建議使用Cache::remember()功能,而不是在兩個不同的步驟中檢查和設置緩存。 Memcached的曾與我好,因爲我開始使用它來代替,所以在你的榜樣:

$cacheKey = 'test_key'; 

$value = Cache::remember($cacheKey, 60, function(){ 
    $value = 'test_value'; 
    return $value; 
}); 

此外,有你檢查了Memcached的實際運行,並已提供正確的連接?

+0

不,$ isAdded不應總是如此。 Cache :: add()的文檔說:如果該項實際添加到緩存中,add方法將返回true。否則,該方法將返回false。 – Andrej 2014-08-29 14:14:43

+0

我也嘗試過你的代碼,它再次在本地工作,但它不會在服務器上添加緩存。 Cache :: has($ cacheKey)再次返回false。 Memcached正在運行,否則會引發異常。我試圖禁用CPanel的擴展,當它被禁用時,我看到一個異常。 – Andrej 2014-08-29 14:18:19

+0

這很奇怪。當然,Memcached的設置方式似乎有點不妥。你得到什麼你運行:看「回聲統計|數控127.0.0.1 11211」?你確定你正在運行memcached,而不是memcache?兩個不同的東西=) – Marcus 2014-08-29 17:49:08