|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
我的文章不会对您的学习起到实质性的作用,您能否成功,还得靠自己的,坚持,坚持,再坚持,就是步入成功的不二法门。 好比说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.谷歌.com/p/memcached/wiki/PHPClientComparison终于学会把表单的数据插入数据库,然后显示出来了,应该说一个程序的雏形已经诞生了。 |
|