Memcached contre Redis

1. Vue d'ensemble

Dans cet article, nous examinerons les similitudes et les différences de deux bases de données en mémoire populaires, Memcached et Redis.

2. Memcached et Redis

Souvent, on pense à la mise en cache pour améliorer les performances tout en traitant une grande quantité de données.

Memcached est un système de mise en cache de mémoire distribuée conçu pour la facilité d'utilisation et la simplicité et est bien adapté comme cache ou magasin de session .

Redis est un magasin de structures de données en mémoire qui offre un riche ensemble de fonctionnalités. Il est utile en tant que cache, base de données, courtier de messages et file d'attente .

3. Installation

3.1. Installation de Memcached

Nous pouvons installer le dernier serveur Memcached en téléchargeant le package et en exécutant make :

$ wget //memcached.org/latest $ tar -zxvf memcached-1.6.3.tar.gz $ cd memcached-1.6.3 $ ./configure && make && make test && sudo make install

3.2. Installation de Redis

De même, nous pouvons installer le dernier serveur Redis:

$ wget //download.redis.io/releases/redis-5.0.8.tar.gz $ tar xzf redis-5.0.8.tar.gz $ cd redis-5.0.8 $ make

4. Similitudes

4.1. Latence inférieure à la milliseconde

Memcached et Redis offrent des temps de réponse inférieurs à la milliseconde en conservant les données en mémoire.

4.2. Partitionnement des données

De même, les deux bases de données en mémoire permettent de distribuer des données sur plusieurs nœuds.

4.3. Prise en charge des langages de programmation

De même, les deux prennent en charge tous les principaux langages de programmation, notamment Java, Python, JavaScript, C et Ruby.

De plus, quelques clients Java sont disponibles pour les deux bases de données en mémoire. Par exemple, Xmemcached et Memcached-java-client sont disponibles pour Memcached, tandis que Jedis, Lettuce et Redisson sont disponibles pour Redis.

4.4. Effacement du cache

Memcached permet de vider le cache à l'aide de la commande flush_all . De même, Redis nous permet de tout supprimer d'un cache en utilisant des commandes telles que FLUSHDB et FLUSHALL .

4.5. Mise à l'échelle

Les deux solutions de mise en cache offrent une évolutivité élevée pour gérer des données volumineuses lorsque la demande augmente de manière exponentielle.

5. Différences

5.1. Ligne de commande

Memcached nous permet d'exécuter des commandes en nous connectant au serveur en utilisant telnet:

$ telnet 10.2.3.4 5678 Trying 10.2.3.4... Connected to 10.2.3.4. 
$ stats STAT pid 14868 STAT uptime 175931 STAT time 1220540125 // ...

Contrairement à Memcached, Redis est livré avec une interface de ligne de commande dédiée, redis-cli , nous permettant d'exécuter des commandes:

$ redis-cli COMMAND 1) 1) "save" 2) (integer) 1 3) 1) "admin" 2) "noscript" // ... 2) 1) "multi" 2) (integer) 1 3) 1) "noscript" 2) "fast" // ... 3) 1) "geodist" 2) (integer) -4 3) 1) "readonly" // ... // ...

Ici, nous avons exécuté COMMAND pour lister toutes les commandes fournies par Redis.

5.2. Dump d'E / S de disque

Memcached gère le vidage de disque uniquement avec des outils tiers comme libmemcached-tools ou des fourches comme memcached-dd.

Cependant, Redis fournit des mécanismes par défaut hautement configurables tels que RDB (fichier de base de données Redis) ou AOF (fichiers Append-only) pour le vidage de disque. Cela peut être utile pour l'archivage et la récupération.

En utilisant redis-cli, nous pouvons exécuter la commande synchrone SAVE pour prendre un instantané des données en mémoire:

$ redis-cli SAVE OK

Ici, la commande stocke l'instantané dans un fichier binaire dump.rdb et renvoie l'état OK une fois terminé.

Cependant, l'exécution du BGSAVE asynchrone démarre le processus d'arrière-plan de prise d'un instantané:

$ redis-cli BGSAVE OK

De plus, nous pouvons utiliser la commande LASTSAVE pour vérifier l'heure Unix du dernier instantané DB réussi.

$ redis-cli LASTSAVE (integer) 1410853592

5.3. Structures de données

Memcached stocke les paires clé-valeur sous forme de chaîne et a une limite de taille de 1 Mo par valeur. Cependant, Redis prend également en charge d'autres structures de données telles que liste, ensemble et hachage, et peut stocker des valeurs allant jusqu'à 512 Mo de taille .

5.4. Réplication

Memcached prend en charge la réplication avec des fourches tierces telles que repcached.

Contrairement à Memcached, Redis nous fournit des fonctionnalités pour multiplier les clusters en répliquant le stockage principal pour une meilleure évolutivité et une haute disponibilité.

Tout d'abord, nous pouvons utiliser la commande REPLICAOF pour créer une réplique du serveur maître Redis. Ensuite, nous exécutons la commande PSYNC sur la réplique pour lancer la réplication à partir du maître.

5.5. Transactions

Memcached ne prend pas en charge les transactions, bien que ses opérations soient atomiques.

Redis provides out-of-the-box support for transactions to execute commands.

We can start the transaction using the MULTI command. Then, we can use the EXEC command for the execution of the following subsequent commands. Finally, Redis provides the WATCH command for the conditional execution of the transaction.

5.6. Publish and Subscribe Messaging

Memcached doesn't support publish/subscribe messaging out-of-the-box.

Redis, on the other hand, provides functionality to publish and subscribe to messages using pub/sub message queues.

This can be useful when designing applications that require real-time communication like chat rooms, social media feeds, and server intercommunication.

Redis comes with dedicated commands like PUBLISH,SUBSCRIBE, and UNSUBSCRIBE to publish a message to the channel, subscribe, and unsubscribe the client to the specified channels, respectively.

5.7. Geospatial Support

Geospatial support is useful for implementing location-based features for our applications. Unlike Memcached, Redis comes with special commands to manage real-time geospatial data.

For instance, the GEODIST command calculates the distance between two geospatial entries. Likewise, the GEORADIUS command returns all the entries within the radius provided.

Additionally, we can use Spring Data Redis to enable Redis geospatial support in a Java application.

5.8. Architecture

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.

Another benefit of Memcached's multi-threaded architecture is its high scalability, achieved by utilizing multiple computational resources.

Redis can scale horizontally via clustering, which is comparatively more complex to set up and operate. Also, we can use Jedis or Lettuce to enable a Redis cluster using a Java application.

5.9. LUA Scripting

In contrast to Memcached, we can execute LUA scripts against Redis. It provides commands like EVAL and SCRIPT LOAD, useful for the execution of the LUA scripts.

For instance, we can execute the EVAL command to evaluate the script:

$ redis-cli eval "return redis.call('set',KEYS[1],'baeldung')" 1 website OK

Here, we've set the key website to the value baeldung by evaluating a script.

5.10. Memory Usage

Memcached has a higher memory utilization rate than Redis when comparing the String data structure.

In spite of that, when Redis uses the hash structure, it provides a higher memory utilization rate than Memcached.

6. Conclusion

Dans cet article, nous avons exploré Memcached et Redis. Tout d'abord, nous avons examiné les similitudes des deux bases de données en mémoire. Ensuite, nous avons examiné les différences dans les fonctionnalités fournies par les deux solutions de mise en cache.

Il existe de nombreuses solutions de mise en cache en mémoire disponibles. Par conséquent, nous devons considérer les fonctionnalités d'un moteur de mise en cache et les comparer à nos cas d'utilisation.

Nous pouvons certainement en conclure que Memcached est un choix solide pour résoudre de simples problèmes de mise en cache. Cependant, de manière générale, Redis surpasse Memcached en offrant des fonctionnalités plus riches et diverses fonctionnalités prometteuses pour des cas d'utilisation complexes.