Home  >  Article  >  Backend Development  >  The two pecl libraries memcache and memcached on php_PHP tutorial

The two pecl libraries memcache and memcached on php_PHP tutorial

WBOY
WBOYOriginal
2016-07-21 15:40:13883browse

I tried to use memcache before, but later I found that memcached supports the setMulti method, and I am going to switch to using the memcached library.

(I tried it. In fact, memcache has never supported multi-value sets, but it is not yet available in the documentation. From the changelog, it seems that it has been supported since version 3.0. The stable version may not have this feature.)

As for efficiency, it’s not clear how big the difference will be.

There is an article here that also says that memcached is based on libmemcached and may be better.

Finally, the php extension based on libmemached is released in pecl.

So, there are now two memcache clients on pecl. One is memcache developed entirely within the PHP framework, and the other is memecached using libmemcached.

As for functions, I have not seen libmemcached, but in theory, libmemcached, which is already very popular in other languages, should have more complete functions. As for program performance (memory and CPU usage), it’s hard to say. Although pecl::memcache is implemented natively, pecl::memached using libmemcached only supports OO interfaces, while pecl::memcache supports both OO and non-OO interfaces. The coexistence of sockets weighs it down.

Actually, these are not the most important. An obvious advantage of using libmemcached is that as the memcached server improves in the future, this lib will definitely follow suit soon. However, pecl::memcache may not be able to follow up on time.

pecl::memcached, another very commendable thing is that the flag is not set during operation. Instead, there is a unified setOption(). For this method, it is very worthwhile to switch from pecl::memcache to pecl::memcached. The specific interface can be found here: http://cvs.php.net/viewvc.cgi/pecl/memcached/memcached-api.php?view=markup

I mentioned in pecl-dev@ whether it can be made into a driver-based architecture. Like current MySQL, you can choose to use mysqlnd or libmysql as the underlying engine. But after thinking about it, I actually don't really support using such an architecture for memcached. It is different from MySQL.

Mysqlnd is developed as an engine rather than a new API, which allows a large number of applications to use the new engine without modifying database operations. If mysqlnd is a new extension, it will face a very difficult choice if it wants to be compatible with previous programs. Because so far, there are three official MySQL class sets that use libmysql and have different external interfaces. Mysqlnd is compatible with mysql, but it is not compatible with mysqli or pdo. Of course, for programs that use their own abstract database classes, this can be achieved by rewriting the class or changing the driver (php level) to achieve compatibility. But think about it, even if you use abstract libraries, there are so many database abstract libraries in the world. If you want everyone to be able to use nd, how many libraries must be modified and how many drivers must be added.

The situation with memcached is much simpler. Currently, the only one that has a closer relationship with the official website is pecl::memcache, and the interfaces are basically based on the memcached protocol, which is almost the same as libmemcache. They can actually be regarded as different drivers in an abstract class. So although there are two different sets of clients, there is almost no need to make any changes when replacing them. You only need to change the place where the class is initialized, and remove the flags of set/get and other methods, unless you use non-OO interface.

In addition, mysql is more complex than memcache in communication and data acquisition. nd can do some things that libmysql cannot do. For example, the buffer can be stored directly using the HashTable and zval inside PHP; for example, some structures that are persistent links can be cached more. (These are just my guesses, I have not read the code of mysqlnd)

Memcached manual:

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

Memcache manual:

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

Memcached protocol in Chinese and English

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/321430.htmlTechArticleI tried to use memcache before, but later found that memcached supports the setMulti method, and I am planning to switch to using the memcached library. (I tried it. In fact, memcache never supports multi-value sets, but the documentation still...
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn