Manual:Memcached/fr

memcached is an in-memory object store that MediaWiki can use for caching values, to reduce the need to perform expensive computations and to reduce load on the database servers.



Quand faut-il l'utiliser ?
Pour un petit site Web hébergé par un seul serveur, l'installation de Memcached n'en vaut peut-être pas la peine. Dans de tels cas, envisagez de configurer MediaWiki pour utiliser l'APCu de PHP à la place comme magasin d'objets principal. Pour les grands sites Web comme Wikipedia et en général pour les wikis hébergés par plusieurs serveurs Web, Memcached est un choix courant pour le cache d'objets de MediaWiki.

For more about caching options in MediaWiki, see Manual:Performance tuning § Object caching



Installer Memcached
La plupart des gestionnaires de packages pour Linux et macOS proposent des packages prêts à l'emploi pour Memcached (y compris pour Debian, Fedora et Ubuntu).

If there's no package available for your distribution, you may need to compile it from source by downloading from the memcached.org. To compile from source you will also need libevent. Memcached et libevent sont des projets open source publiés sous des licences de style BSD.

For more about Memcached in general, see also "Memcached" on Wikipedia.

Sécurité
Memcached n'a aucune sécurité ni authentification. Veuillez vous assurer que votre serveur est correctement protégé par un pare-feu et que le ou les ports utilisés pour les serveurs memcached ne sont pas accessibles au public. Sinon, n'importe qui sur Internet peut mettre des données et lire des données à partir de votre cache.

Un attaquant familier avec les composants internes de MediaWiki pourrait l'utiliser pour se donner un accès développeur et supprimer toutes les données de la base de données du wiki, ainsi que pour obtenir les hachages de mot de passe et les adresses e-mail de tous les utilisateurs.



Client PHP pour Memcached
Au moment d'écrire ces lignes (MediaWiki 1.27), MediaWiki utilise un client memcached en PHP pur (basé sur le travail de Ryan T. Dean). Il prend également en charge l'extension php-memcached PECL. To use Memcached with MediaWiki, PHP must be compiled with  (this is the default).

To read more about how to select Memcached as the backend for different parts of MediaWiki, see Manual:Caching.

Configuration
Si vous voulez commencer petit, exécutez simplement un memcached sur votre serveur Web : memcached -d -l 127.0.0.1 -p 11211 -m 64

(pour fonctionner en mode daemon, accessible uniquement via l'interface loopback de bouclage, sur le port 11211, utilisant jusqu'à 64 Mo de mémoire)

Dans votre fichier LocalSettings.php, définissez :

The wiki should then use memcached to cache various data. To use multiple servers (physically separate boxes or multiple caches on one machine on a large-memory x86 / Power box), just add more items to the array. To increase the weight of a server (say, because it has twice the memory of the others and you want to spread usage evenly), make its entry a subarray:

SELinux
For systems with SELinux, there are several policies for Memcached. To allow Apache (httpd) to access Memcached, you must set the following policy:

setsebool -P httpd_can_network_memcache 1

Loss of session data when saving
If you store session data in memcached, and users see this message intermittently when they try to save edits:

then one or more of your memcached servers might have a misconfigured  file. On each of your memcached servers, make sure the server's own hostname is mapped to localhost:

127.0.0.1 servername.here localhost localhost.localdomain ...

Otherwise, the server might not be able to connect to its own memcached process.

Using memcached in your code
If you're writing an extension that does expensive database queries, it might be useful to cache the data in memcached. There are a few main ways to get a handle to memcached:


 * ...use this if you want a memory-based shared cache with explicit purge ability in order to store values derived from persistent sources
 * ...use this if you want a memory-based ephemeral store that is not shared among datacenters
 * ...use this if you want a memory-based ephemeral cache that is not shared among web servers
 * ...use this if you want any available cache, which may or may not be per-datacenter, even an emulated one that uses a SQL database. Note that these may return handles that talk to Redis, APC, MySQL or other stores instead. The use of the word "memcached" is historically due to the API being defined around the simple commands that memcached supports and the fact that, to date, memcached is normally the best general-purpose cache store.

Extensions that have specific needs (like persistence) should define new configuration settings like  or. Code using the caches can pass them to  and , respectively.

The following code snippet demonstrates how to cache the results of a database query into memcached for 15 minutes and query memcached first for the results instead of the database.

The abstract BagOStuff and WANObjectCache classes define and document all of the available functions:



Old Development Notes
Broadly speaking, we'd like to be able to dump lots of data in the cache, use it whenever we can, and automatically expire it when changes are made.

Expiration model

 * explicit expiration times: memcached lets us set an expiration time on an object when we store it. After the time is up, another request for the object will find that it has expired and return nothing to us.
 * pro: last-ditch fallback to let data that could be updated badly eventually fall out of the cache
 * con: we have to know ahead of time when it will cease to be invalid. hard to do when we're dealing with user edits!


 * delete cached objects when we know we're doing something that will cause them to be invalid but are not in a position to update them while we're at it
 * pro: fairly simple; the item will be reloaded from the database and recached when it's next needed
 * con: if this will affect a large number of related items (for instance, creating or deleting a page invalidates the links/brokenlinks tables and rendered HTML cache of pages that link to that page) we may have to hunt them all down and do a lot of updating


 * include timestamps on cached objects and do our own expiries based on dependencies
 * pro: can expire many objects at once by updating a single node they depend on
 * con: more things to load; multiple dependencies could be trickier to work with

Questions & Answers
Q: Can I search on part of a key or a regular expression on a Memcached server?

A: No, you can only search for an exact key if you need more information on what you could possibly do you can check out the Memcached protocol

Q: Can I have multiple wikis point to the same Memcached server?

A: Yes, as long as each have different wiki-ids ($wgDBname). Certain cache keys are intentionally shared in such a scenario, such as rate limiting stuff.