色尼玛亚洲综合影院,亚洲3atv精品一区二区三区,麻豆freexxxx性91精品,欧美在线91

php上的memcache和memcached兩個(gè)pecl庫(kù)

之前嘗試用的是memcache,后來(lái)發(fā)現(xiàn)memcached支持setMulti方法,準(zhǔn)備轉(zhuǎn)向使用memcached庫(kù)了。

(試了下,實(shí)際上,memcache從支持多值set,但文檔上還沒(méi)有,看changelog好像是3.0開(kāi)始支持,穩(wěn)定版可能不帶此功能。)

至于效率,也不清楚會(huì)有多大差距。

這里有一篇文章也說(shuō)到,memcached是基于libmemcached,可能要好一些。

終于,基于libmemached的php擴(kuò)展在pecl發(fā)布了。

于是,現(xiàn)在pecl上有兩個(gè)memcache客戶(hù)端了。一個(gè)是完全在php框架內(nèi)開(kāi)發(fā)的memcache,一個(gè)是使用libmemcached的memecached。

功能嘛,我沒(méi)看過(guò)libmemcached,但是理論上來(lái)說(shuō),在其他語(yǔ)言里已經(jīng)很流行的libmemcached應(yīng)該會(huì)有更完善的功能。而程序上性能(內(nèi)存和CPU使用率),不好說(shuō),雖然pecl::memcache是原生實(shí)現(xiàn)的,但是使用libmemcached的pecl::memached只支持OO接口,而pecl::memcache則是OO和非OO兩套接口并存,這點(diǎn)拖累了它。

其實(shí)這些都不是最重要的。使用libmemcached有個(gè)明顯的優(yōu)點(diǎn),就是以后隨著memcached服務(wù)器端的改進(jìn),這個(gè)lib也必定會(huì)馬上跟進(jìn)的。而pecl::memcache卻不一定能做到按時(shí)跟進(jìn)。

pecl::memcached,還有個(gè)非常稱(chēng)贊的地方,就是flag不是在操作的時(shí)候設(shè)置了。而是有一個(gè)統(tǒng)一的setOption()。沖著這個(gè)方法,就非常值得從pecl::memcache轉(zhuǎn)到pecl::memcached了。具體的接口可以看這里:http://cvs.php.NET/viewvc.cgi/pecl/memcached/memcached-api.php?view=markup

我在pecl-dev@里提到是否可以做成driver-based的架構(gòu)。跟現(xiàn)在的MySQL一樣,可以選擇使用mysqlnd或者libmysql作為底層的引擎。但是之后想想,其實(shí)我并不是很支持對(duì)memcached使用這樣的架構(gòu),它和MySQL的情況不一樣。

mysqlnd作為一個(gè)引擎而不是一個(gè)新的api來(lái)開(kāi)發(fā),可以使得大量的應(yīng)用程序不需要對(duì)數(shù)據(jù)庫(kù)操作做修改即可用上新的引擎。如果mysqlnd作為一個(gè)新的extension,那么如果它想兼容以前的程序,就面臨一個(gè)很困難的選擇。因?yàn)槟壳盀橹梗嬖?個(gè)官方的使用libmysql的,并具有不同對(duì)外接口的MySQL類(lèi)集。mysqlnd能兼容mysql,就無(wú)法兼容mysqli或者pdo。當(dāng)然對(duì)于使用自己的抽象數(shù)據(jù)庫(kù)類(lèi)的程序來(lái)說(shuō),這個(gè)可以通過(guò)改寫(xiě)類(lèi)或者更換driver(php層面)來(lái)實(shí)現(xiàn)兼容。但是要想想,就算是使用抽象庫(kù),這個(gè)世界如此之多的數(shù)據(jù)庫(kù)抽象庫(kù),如果要讓所有人都用得起nd,那得改多少個(gè)庫(kù),加多少個(gè)driver阿。

memcached的情況就簡(jiǎn)單很多了,目前和官方關(guān)系比較密切的只有pecl::memcache,而且接口基本上都是根據(jù)memcached的協(xié)議來(lái)的,和libmemcache相差無(wú)幾。它們其實(shí)都可以被看作是一個(gè)抽象類(lèi)里的不同driver。所以雖然是兩套不同的客戶(hù)端,但是更換起來(lái),幾乎不需要做什么改動(dòng),只需要在類(lèi)初始化的地方更改一下,set/get等等這些方法的flag去掉即可,除非你使用了非OO的接口。

另外mysql在通訊和數(shù)據(jù)獲取上也比memcache復(fù)雜,nd可以做到一些libmysql無(wú)法做到的事情。例如buffer可以直接用php內(nèi)部的HashTable和zval存儲(chǔ);再例如一些作為持久鏈接的結(jié)構(gòu)可以更多地緩存起來(lái)。(這些例如只是我的猜測(cè),我并沒(méi)有去閱讀過(guò)mysqlnd的代碼)

Memcached manual:

http://cn.php.NET/manual/en/book.memcached.php

Memcache manual:

http://cn.php.NET/manual/en/book.memcache.php

Memcached 協(xié)議中英文對(duì)照

php技術(shù)php上的memcache和memcached兩個(gè)pecl庫(kù),轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 台北市| 五台县| 琼结县| 屏山县| 原阳县| 阿勒泰市| 郁南县| 丹凤县| 盱眙县| 宾川县| 交城县| 松阳县| 西盟| 泸定县| 本溪市| 吐鲁番市| 新安县| 萍乡市| 阳春市| 治县。| 岳池县| 绥滨县| 望奎县| 博爱县| 吴江市| 罗江县| 许昌县| 五台县| 九龙县| 兴文县| 菏泽市| 获嘉县| 收藏| 洱源县| 孝昌县| 盐池县| 萍乡市| 宜章县| 宜宾县| 揭西县| 锡林浩特市|