Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

When should I use Memcache instead of Memcached?

Tags:

php

memcached

It seems that PHP has two memcached libraries named memcache and memcached. What is the difference and how do you know which one to use? Is one outdated? It seems that memcached offers more methods so I would assume that means it has had the most development - but it also seems to require external C/C++ libraries so I'm not sure if I can install it.

It seems that memcache has been around longer, does not require additional libraries, and has pre-compiled binaries for even windows! I would think that it would be the better choice for now. However, being new to memcached (server) I'm not sure if there is some super important features in memcached (php) that make it worth the extra trouble.

like image 763
Xeoncross Avatar asked Sep 18 '09 03:09

Xeoncross


People also ask

Is it memcache or Memcached?

They both have very basic difference while storing value. Memcache mostly considers every value as string whereas Memcached stores it value's original type.

Why do we use memcache?

Memcached can serve cached items in less than a millisecond, and enables you to easily and cost effectively scale for higher loads. Memcached is popular for database query results caching, session caching, web page caching, API caching, and caching of objects such as images, files, and metadata.

Should I use Memcache or Redis?

Redis uses a single core and shows better performance than Memcached in storing small datasets when measured in terms of cores. Memcached implements a multi-threaded architecture by utilizing multiple cores. Therefore, for storing larger datasets, Memcached can perform better than Redis.

What happens when Memcache is updated?

Requested data is now forwarded to the client-server and, at the same time, the Memcache index is updated with these latest values: the cache is now ready to be used in the future (see step 3). Typically, Memcached is set up via different Memcached servers and clients, which help to distribute the load of the requests.

What is Memcached in PostgreSQL?

Memcached is an in-memory key-value store for small arbitrary data (strings, objects) from results of database calls, API calls, or page rendering. This system stores key-values data for string and objects, such as: Memcached uses a client-server architecture based on four components:

Does Memcached require CPU resources?

Since Memcached is solely relying on RAM, it doesn’t require too many CPU resources. Several web hosting services come with pre-installed Memcached system on their cloud servers: you can find some examples on A2 Hosting, Cloudways or Siteground.

Can I use Memcached on my Wordpress site?

The first condition to use Memcached on your WordPress site is that your hosting server has it installed. The second condition is that your web application can support Memcached. Since Memcached is solely relying on RAM, it doesn’t require too many CPU resources.


3 Answers

Memcached client library was just recently released as stable. It is being used by digg ( was developed for digg by Andrei Zmievski, now no longer with digg) and implements much more of the memcached protocol than the older memcache client. The most important features that memcached has are:

  1. Cas tokens. This made my life much easier and is an easy preventive system for stale data. Whenever you pull something from the cache, you can receive with it a cas token (a double number). You can than use that token to save your updated object. If no one else updated the value while your thread was running, the swap will succeed. Otherwise a newer cas token was created and you are forced to reload the data and save it again with the new token.
  2. Read through callbacks are the best thing since sliced bread. It has simplified much of my code.
  3. getDelayed() is a nice feature that can reduce the time your script has to wait for the results to come back from the server.
  4. While the memcached server is supposed to be very stable, it is not the fastest. You can use binary protocol instead of ASCII with the newer client.
  5. Whenever you save complex data into memcached the client used to always do serialization of the value (which is slow), but now with memcached client you have the option of using igbinary. So far I haven't had the chance to test how much of a performance gain this can be.

All of this points were enough for me to switch to the newest client, and can tell you that it works like a charm. There is that external dependency on the libmemcached library, but have managed to install it nonetheless on Ubuntu and Mac OSX, so no problems there so far.

If you decide to update to the newer library, I suggest you update to the latest server version as well as it has some nice features as well. You will need to install libevent for it to compile, but on Ubuntu it wasn't much trouble.

I haven't seen any frameworks pick up the new memcached client thus far (although I don't keep track of them), but I presume Zend will get on board shortly.

UPDATE

Zend Framework 2 has an adapter for Memcached which can be found here

like image 120
Miha Hribar Avatar answered Oct 10 '22 02:10

Miha Hribar


When using Windows, the comparison is cut short: memcache appears to be the only client available.

like image 10
rymo Avatar answered Oct 10 '22 01:10

rymo


Memcached is a newer API, it also provides memcached as a session provider which could be great if you have a farm of server.

After the version is still really low 0.2 but I have used both and I didn't encounter major problem, so I would go to memcached since it's new.

like image 8
RageZ Avatar answered Oct 10 '22 03:10

RageZ