比如說PECL里有兩個Memcached的模塊,Memcache和Memcached,目前大部分PHP環(huán)境里使用的是名字里不帶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初始值是一個整數(shù),不使用increment方法,通過get/set完成每次加一。
在Memcache版本里,我們只能按照大致如下的方式來進行:
$m = new Memcache();
$m->addServer('localhost', 11211);
$v = $m->get('counter');
$m->set('counter', $v + 1);
由于get/set這兩個動作無法作為一個原子來操作,所以當多個進程同時處理時,會出現(xiàn)丟失的可能,更讓人惱火的是,你根本就不知道什么時候出現(xiàn)丟失。
再看看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出來,就會發(fā)現(xiàn)$token其實就是一個版本號,如果通過get得到的$token版本號在cas的時候不對應,就說明已經(jīng)有別的操作更新了,此時cas操作會失敗,至于如何繼續(xù)操作,就看你自己了。
注:如果你想手動重現(xiàn)一下沖突的情況,可在get和cas之間sleep若干秒,并拷貝兩份腳本,先后執(zhí)行。
順便說一句,推薦的Memcached版本模塊的哈希設置如下:
$md->setOption(Memcached::OPT_DISTRIBUTION, Memcached::DISTRIBUTION_CONSISTENT);
$md->setOption(Memcached::OPT_HASH, Memcached::HASH_CRC);
總結
Memcached版本還有很多Memcache沒有的功能,比如通過getByKey, setByKey等自動支持多個服務器,就不贅述了,該用哪個擴展已經(jīng)不言自明了。
補充:http://code.google.com/p/memcached/wiki/PHPClientComparison
PHP模塊 Memcached功能多于Memcache
2019-11-29 14:48PHP教程網(wǎng) PHP教程
PHP搭配Memcached已經(jīng)是婦孺皆知的標配了。再提似乎讓人覺得太“圡”了,不過有一些細節(jié)不見得人人都清楚
延伸 · 閱讀
- 2022-03-05ubuntu環(huán)境下安裝memcache及啟動的方法
- 2022-02-27CentOS 7.x安裝部署Memcached服務器的詳細方法
- 2022-02-19php memcached的實例用法詳解
- 2022-02-13linux下安裝memcached_動力節(jié)點Java學院整理
- 2021-12-30yum 安裝memcache permission denied(拒絕訪問) 問題
- 2021-12-30Linux 下安裝 memcached 及 memcacheq的方法
- PHP教程
PHP中讀取文件的8種方法和代碼實例
這篇文章主要介紹了PHP中讀取文件的8種方法和代碼實例,本文總結了PHP中讀取文件的8個函數(shù),每一個都附有使用例子及注意事項等,需要的朋友可以參考下...
- PHP教程
php htmlentities()函數(shù)的定義和用法
下面小編就為大家?guī)硪黄猵hp htmlentities()函數(shù)的定義和用法。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧...
- PHP教程
PHP常量DIRECTORY_SEPARATOR原理及用法解析
這篇文章主要介紹了PHP常量DIRECTORY_SEPARATOR原理及用法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友...
- PHP教程
php全角字符轉換為半角函數(shù)
這篇文章主要介紹了PHP全角半角轉換函數(shù),把目前能找到的所有全角都列出來了一個個替換吧,需要的朋友可以參考下 ...
- PHP教程
php實現(xiàn)的支持imagemagick及gd庫兩種處理的縮略圖生成類
這篇文章主要介紹了php實現(xiàn)的支持imagemagick及gd庫兩種處理的縮略圖生成類,包含了用法的詳細描述,非常實用,需要的朋友可以參考下...
- PHP教程
php學習之數(shù)據(jù)類型之間的轉換介紹
php學習之數(shù)據(jù)類型之間的轉換介紹,學習php的朋友可以參考下。 ...
- PHP教程
php學習筆記 數(shù)組的常用函數(shù)
只要一個變量,需要在多個方法使用,就將這個變量聲明為成員屬性,可以直接在這個對象中的所有方法中使用 成員屬性,相當于這個對象中的全局變量...
- PHP教程
PHP變量的定義、可變變量、變量引用、銷毀方法
這篇文章主要介紹了PHP變量的定義、可變變量、變量引用、銷毀方法,需要的朋友可以參考下 ...