PHP模組 Memcached功能多於Memcache

來源:互聯網
上載者:User

比如說PECL裡有兩個Memcached的模組,Memcache和Memcached,目前大部分PHP環境裡使用的是名字裡不帶d的Memcache版本,這個版本釋出的比較早,是一個原生版本,與之對應的帶d的Memcached版本則是建立在libmemcached的基礎上,所以說Memcached版本的功能更全一些。

安裝Memcached版本的PHP模組

wget http://download.tangent.org/libmemcached-0.35.tar.gz
tar zxf libmemcached-0.35.tar.gz
cd libmemcached-0.35
./configure
make
make install

wget http://pecl.php.net/get/memcached-1.0.0.tgz
tar zxf memcached-1.0.0.tgz
cd memcached-1.0.0
phpize
./configure
make
make install

開啟php.ini加上:

extension = "memcached.so"

這樣安裝就結束了,你可以通過下列命令來確認:

php -m | grep mem

示範Memcached版本的新功能

先虛構一個問題,假設counter初始值是一個整數,不使用increment方法,通過get/set完成每次加一。

在Memcache版本裡,我們只能按照大致如下的方式來進行:

$m = new Memcache();
$m->addServer('localhost', 11211);
$v = $m->get('counter');
$m->set('counter', $v + 1);

由於get/set這兩個動作無法作為一個原子來操作,所以當多個進程同時處理時,會出現丟失的可能,更讓人惱火的是,你根本就不知道什麼時候出現丟失。

再看看Memcached版本裡,我們是如何做的:

$md = new Memcached();
$md->addServer('localhost', 11211);
$v = $md->get('counter', null, $token)
$md->cas($token, 'counter', $v + 1);

cas是Memcached版本裡提供的功能,說白了就是一個樂觀鎖的功能,如果你把$token的值var_dump出來,就會發現$token其實就是一個版本號碼,如果通過get得到的$token版本號碼在cas的時候不對應,就說明已經有別的操作更新了,此時cas操作會失敗,至於如何繼續操作,就看你自己了。

註:如果你想手動重現一下衝突的情況,可在get和cas之間sleep若干秒,並拷貝兩份指令碼,先後執行。

順便說一句,推薦的Memcached版本模組的雜湊設定如下:

$md->setOption(Memcached::OPT_DISTRIBUTION, Memcached::DISTRIBUTION_CONSISTENT);
$md->setOption(Memcached::OPT_HASH, Memcached::HASH_CRC);

總結

Memcached版本還有很多Memcache沒有的功能,比如通過getByKey, setByKey等自動支援多個伺服器,就不贅述了,該用哪個擴充已經不言自明了。

補充:http://code.google.com/p/memcached/wiki/PHPClientComparison

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.