話說PHP的Memcache & Memcached這兩個擴展之間的關係,你都摸清楚了嗎?

Memcached是一個免費開源的、高性能的、分佈式內存緩存系統,對於很多WEB程序員來說,對它應該非常熟悉,很多WEB程序員經常用它將數據庫裏面的數據緩存起來從而提供網站或者應用的性能,而PHP作爲網站開發的熱門語言,肯定也是支持Memcached的,但是當我們打開PHP的官方手冊,發現一個有趣的情況,就是PHP有兩個擴展提供了類似的功能,它們就是Memcache和Memcached擴展,這兩個擴展的關係是什麼?以及兩個擴展是不是相同的?帶着這些問題,下面我們就來一一進行分析。

一些基本的概念

其實,Memcached就是一個C/S應用,所以有下面兩個基本概念:

  • Memcached服務端。

    就是真正提供數據緩存的應用端,這個端是一個獨立的進程,並且開放相應端口供Memcached客戶端對數據進行增刪改查等等操作。

  • Memcached客戶端。

    只要是能夠與Memcached服務端進行通訊、並且完成相應的數據操作功能,我們都可以稱之爲Memcached客戶端,比如本文說的PHP兩個擴展,都可以稱之爲客戶端。

兩個擴展的相關知識和運行原理

在pecl官方擴展庫,我們能夠看到,Memcache擴展的生日是2004年2月26日,而Memcached擴展的生日是2009年1月29日,哈哈,看着這兩個生日,大家是不是想到了什麼呢?

從上面的生日,我們能夠看到,Memcache是先出生的,而Memcached是後出生的,下面我們再來看看二者的定義:

  • Memcache擴展。

    該擴展是一個提供了面向過程和麪向對象兩種方式的擴展。

  • Memcached。

    這個擴展使用libmemcached庫與Memcached服務程序進行通信。

看了兩個擴展的定義,越來越有意思了,我們似乎離真相越來越近了,只不過還差一步,就是這個libmemcached到底是什麼,我們接着思考這個問題,繼續打開Memcached的官方文檔,我們不難發現,其實這個libmemcached就是Memcached提供的官方客戶端,換句話說,php的Memcached擴展其實就是一個二次封裝擴展,該擴展站在官方提供的客戶端擴展的肩上,所以提供的功能肯定就多,而反觀Memcache擴展僅僅是PHP自己實現的一套Memcached擴展庫而已,說到這裏,想必很多PHP程序員應該明白了,爲什麼我們不再提倡使用Memcache擴展的原因,下圖是兩個擴展的工作原理。

memcached

在PHP裏面還有一個特殊的擴展

上面分析了兩個擴展,其實這兩個擴展的情況在PHP裏面並不是唯一的,在PHP裏面還有一個知識點和這個情況是一樣的,它就是我們接下來要說的Mysqlnd和libmysqlclient。

通過前面的分析,我們不難想到,libmysqlclient其實就是MySQL數據庫官方提供的MySQL編程客戶端,而Mysqlnd其實就是PHP自己實現的MySQL編程客戶端,它不是站在libmysqlclient的肩上進行二次開發的,它是用C語言編寫的。

msyql

其實,Memcached不僅僅支持PHP語言,還支持C、C++、Java、MySQL、Python、Nodejs等等,通過上面的Memcache擴展,我們知道,只要按照它提供的協議,很容易實現自己領域編程語言的Memcached客戶端,說了這麼多,不知道你是否已經徹底明白了二者的關係,如果還有不明白的,可以在評論裏面進行互動。也可以加羣討論(Q羣號312724475


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章