php memcache與php memcached以及遇到的問題

來源:互聯網
上載者:User
PHP有兩個memcache用戶端:php memcache和php memcached。
php memcache獨立用php實現,是老用戶端,從我們實踐中已發現有多個問題,而且功能少,屬性也可設定的少;
php memcached是基於原生的c的libmemcached的擴充,更加完善,建議替換為php memcached。

1. Php memcache的問題
1.1 分布式問題
php memcache預設會自動切換執行個體,所以有時取到老資料,並且value飄忽不定。
網友分享的問題:
這幾天做某個產品的時候遇到一個小問題,現象比較詭異,產品用了兩台分布式的memcached伺服器。某一個計數器取回來的數偶爾會不對,最後定位在php memcache client的failover機制上面。
我們知道,在memcached分布式環境下,某一個key是通過hash計算,分配到某一個memcached上面的。
如果php.ini裡面 memcache.allow_failover = 1的時候,在分布式環境下,某一台memcached出問題的話,會自動到其他的memcached嘗試,就會出現上面的問題。所以要設定 allow_failover = 0 那麼取不到時就直接返回失敗而不會從其它mc上取,這樣以避免網路異常或server端異常時,經常切換執行個體,會取到老資料。

1.2 高並發下穩定性問題
新浪微博提到的教訓:
php memcache換成php memcached,在高並發下穩定下極大提高;
另外功能更多,出錯碼更精確。

Twitter的緩衝經驗
多層次Cache,減輕某些cache節點宕掉後的影響,讀寫都cache;
將memcached api統一換為libmemcached(方便多語言訪問memcached,讓分布式等各種規則都一致。)

1.3 1秒逾時間隔沒法修改問題
php memcache用戶端有個1秒逾時間隔沒法修改問題:
bool Memcache::connect ( string $host [, int $port [, int $timeout ]] )
第三個參數本來可設定timeout,單位秒,但無法修改。
測試了以下三種修改timeout的方法都無效:
1.3.1. 用memcache api Memcache::setServerParams不能修改;
1.3.2. 改memcache 原始碼vi php_memcache.h宏定義不能修改;
1.3.3. php.ini內這個配置:default_socket_timeout = 60對本timeout無效。

2. memcache和memcached對比
Php memcache這個老用戶端在屬性設定方面可設定的很少;
出錯碼粒度很粗,出錯後難以定位;
而且功能欠缺一些:

有PHP主要用於兩個客戶。一個是老年人,更廣泛的PECL /緩衝和其他新的,很少使用,功能更豐富的PECL /緩衝。

支援基礎等多個伺服器,設定值,得到的值,增量、減量和擷取資料。

這裡有一些更先進的功能和資訊。

項目 pecl/memcache pecl/memcachedFirst Release Date 2004-06-08 2009-01-29 (beta)Actively Developed Yes YesExternal Dependency None libmemcachedAutomatic Key Fixup1 Yes NoAppend/Prepend No YesAutomatic Serialzation2 Yes YesBinary Protocol No OptionalCAS No YesCompression Yes YesCommunication Timeout Connect Only Various OptionsConsistent Hashing Yes YesDelayed Get No YesMulti-Get Yes YesSession Support Yes YesSet/Get to a specific server No YesStores Numerics Converted to Strings Yes
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.