2013-03-30 26 views
2

我目前有關於本地部署我的web服務api的麻煩。我正在使用memcached和PHP Memcache擴展。以下是一些行爲。本地apache服務器上的奇怪memcache行爲

我有一個登錄功能,首先檢查用戶信息是否在內存中,下面的代碼;

$cache = Memcacher::get_instance()->load('user.' . $email); 
  • 如果緩存存在,那麼它將返回變量$cachetrue
  • 如果緩存不存在,那麼我用下面的代碼將它保存到內存中;

    $cache = Memcacher::get_instance()->save('user.' . $login['value']['email'], $login);

參數$login是一個關聯數組,其保持用戶信息。

將它保存到內存後,我嘗試重新登錄。但是,在保存到memcached服務器3-4次之前,它不保存信息。

3-4登錄後,我從緩存中成功獲取登錄信息。

任何人都可以解釋我這種奇怪的行爲?有沒有任何memcached配置變量來防止這種情況?

注:我沖洗內存與sudo service memcached restart 重新起動的memcached在Ubuntu

注:Memcacher是一種使用PHP的Memcache擴展的set()get()功能的自定義模塊

注:這裏的源代碼Memcacher

+0

'Memcacher'看起來像什麼....? – Baba

+0

它看起來像這樣:https://github.com/arascanakin/ariba/blob/master/library/memcache.class.php – aacanakin

+0

Config :: get('memcache_lifetime')'的值是什麼? – Baba

回答

1

您將數組連接到一個字符串。在點上,$ login可能不是真的,因爲你將會開始接收你所擁有的信息,因爲連接會起作用。但是,如果它是一個數組,您將無法將密鑰保存在內存緩存中。您會收到一條通知,我想你會忽略它。

+0

我寫錯了,應該是'$ login ['value'] ['email']'。讓我編輯。對不起, – aacanakin

+1

您可能要考慮檢查錯誤。你定義的一件事情應該是返回Memcache :: set()的結果,它實際上對成功返回true,對於失敗返回false。我一直在使用memcache超過1 - 2年,我沒有問題。這意味着問題不在您的示例中表達,或者某些值不匹配。 – Xnoise

+0

謝謝你的回答。你推薦Memcache或Memcached PHP擴展嗎? – aacanakin