Redis
 sql >> Base de données >  >> NoSQL >> Redis

Redis et Memcached – Comparaison 2021

Redis signifie RE mot DI ctionnaire S erver, créé en 2009 par Salvatore Sanfilippo. Memcached, quant à lui, a été créé en 2003 par Brad Fitzpatrick. Redis et Memcached sont :

  • Structures de données en mémoire NoSQL
  • Écrit en C
  • Open source
  • Utilisé pour accélérer les applications
  • Prise en charge d'une latence inférieure à la milliseconde

En 2014, Salvatore a écrit un excellent article sur StackOverflow sur le moment où il est plus logique d'utiliser Memcached que Redis. Dans cet article, nous fournissons une comparaison actuelle et détaillée entre Redis et Memcached afin que vous puissiez faire un choix éclairé quant à leur utilisation dans votre application.

Infographie

Cet article a été condensé dans l'infographie ci-dessous. Avec cette infographie, vous pouvez facilement visualiser les résultats de cette comparaison pour voir lequel arrive en tête dans différents scénarios. Si vous souhaitez lire la comparaison au format texte, cliquez ici.

Documents

Pour commencer, Redis est bien plus documenté que Memcached. Cela facilite l'apprentissage, l'administration et l'utilisation.

Modèle de base de données

Redis est avant tout un magasin de valeur clé. Alors que les clés sont des chaînes binaires, l'avantage avec Redis est que la valeur n'est pas limitée aux seules chaînes binaires. Il peut s'agir d'une variété de structures de données qui permettent de stocker des objets complexes et de fournir un riche ensemble d'opérations sur eux. Redis prévoit également une extensibilité via les modules Redis. Les modules Redis sont des extensions qui fournissent des structures de données et des fonctionnalités supplémentaires non disponibles dans l'ensemble de fonctionnalités de base. Voici un échantillon de quelques fonctionnalités désormais disponibles sous forme de modules :

  • Magasin de documents
  • SGBD graphique
  • Moteur de recherche
  • SGBD de séries chronologiques

Memcached est un magasin de valeur de clé simple qui ne prend en charge que les chaînes binaires comme valeur.

Structures de données

Comme mentionné ci-dessus, Redis propose plusieurs types de structure de données lui permettant d'être extrêmement flexible à utiliser, y compris les chaînes, les hachages, les listes, les ensembles, les ensembles triés, les bitmaps, les champs de bits, l'HyperLogLog, Index géospatiaux et Streams. Vous pouvez en savoir plus à ce sujet dans cet article Top Redis Use Cases by Core Data Structure Types.

Source de l'image :https://redislabs.com/redis-enterprise/data-structures/

Memcached ne prend en charge que les chaînes binaires simples qui sont idéales pour les données en lecture seule, donc si vous n'avez pas besoin de toutes les cloches et sifflets de Redis, Memcached est une base de données plus simple pour vous à utiliser.

Classement et popularité de la base de données

La plus grande popularité d'une base de données se traduit par une plus grande communauté d'utilisateurs, plus de discussions et de didacticiels générés par les utilisateurs, et plus d'aide et de support via des outils tiers tels que les plates-formes DBaaS et des outils d'analyse pour vous aider à optimiser vos déploiements.

Redis est la 8e base de données la plus populaire au monde en février 2021, selon DB-Engines, en raison de sa simplicité, de ses structures de données riches et de sa documentation de qualité. Memcached est actuellement classé comme la 28e base de données la plus populaire. Lorsque Redis et Memcached sont classés par rapport aux modèles de base de données clé-valeur, Redis se classe 1er et Memcached arrive 4e. Toutefois, si vous recherchez uniquement une base de données clé-valeur open source ou une base de données pouvant être déployée sur site, Memcached arrive en deuxième position, car Amazon DynamoDB et Microsoft Azure Cosmos DB sont des bases de données commerciales qui ne peuvent être déployées que dans le nuage.

Architecture

Redis et Memcached suivent tous deux client-serveur architecture. Les clients remplissent les données dans le serveur sous forme de clé-valeur.

Redis est monothread alors que Memcached a une architecture multithread. Memcached évolue mieux sur un système avec plus de cœurs qui peuvent gérer plus d'opérations si la capacité de calcul est mise à l'échelle. Cependant, plusieurs instances Redis peuvent être lancées sur le même système pour utiliser des cœurs supplémentaires.

Facilité d'utilisation

Comme expliqué ci-dessus dans la section Modèle de base de données, Redis, étant une base de données multi-modèle, peut être utilisée avec n'importe quel type de modèle de données. Dans Redis, il est facile d'écrire du code car cela simplifie les tâches complexes. Redis a des structures de données avancées et n'est pas limité à de simples valeurs de chaîne. Par exemple, si votre application stocke des données dans des ensembles et que vous souhaitez suivre les ensembles dans une liste, vous pouvez le faire facilement dans Redis. Une tâche similaire sur Memcached n'est pas possible. Mais il existe d'autres façons d'effectuer les mêmes tâches qui nécessiteront plus de lignes de code.

Memcached, en revanche, ne stocke que des valeurs de chaîne simples. Ainsi, l'application doit gérer la complexité de la structure des données.

Partitionnement des données

Redis prend en charge le partitionnement des données sur plusieurs instances de nœud. Les utilisateurs actuels de Redis exploitent différentes techniques telles que le partitionnement par plage, le partitionnement par hachage et le hachage cohérent pour le partitionnement des données. Dans Redis, le partitionnement des données peut être implémenté de trois manières différentes :

  • Partitionnement côté client
  • Partitionnement assisté par proxy (exemple :twemproxy)
  • Partitionnement côté serveur avec routage des requêtes dans les nœuds du cluster

Memcached prend également en charge le partitionnement des données sur plusieurs nœuds, et le hachage cohérent est une approche recommandée pour garantir que la charge de trafic est uniformément répartie.

Redis vs Memcached - Comparaison 2021Cliquez pour tweeter

Langues prises en charge

Redis prend en charge presque tous les langages de programmation les plus utilisés, des langages de haut niveau aux langages de bas niveau. Memcached prend cependant en charge moins de langues que Redis, mais prend en charge toutes les langues populaires.

Memcaché

  • .Net
  • C
  • C++
  • Fusion à froid
  • Erlang
  • Java
  • Lisp
  • Lua
  • OCaml
  • Perl
  • PHP
  • Python
  • Rubis

Redis

  • C
  • C#
  • C++
  • Clojure
  • Cristal
  • D
  • Fléchette
  • Élixir
  • Erlang
  • Fantaisie
  • Aller
  • Haskell
  • Haxe
  • Java
  • JavaScript (Node.js)
  • Lisp
  • Lua
  • MatLab
  • Objectif-C
  • OCaml
  • Pascal
  • Perl
  • PHP
  • Prologue
  • Données pures
  • Python
  • R
  • Rebol
  • Rubis
  • Rouille
  • Échelle
  • Schéma
  • Petit discours
  • Rapide
  • Tcl
  • Visuel Basique

Transactions

Les "transactions" Redis sont exécutées avec les trois garanties ci-dessous :

  • Les transactions sont sérialisées et exécutées de manière séquentielle
  • Soit toutes les commandes, soit aucune, sont traitées (transactions atomiques)
  • Le verrouillage optimiste offre une garantie supplémentaire grâce à la vérification et à la mise en place

Redis s'assure qu'une seule commande d'un ordinateur client est exécutée à la fois. Toutes les commandes des transactions sont exécutées lorsque la commande "EXEC" est appelée pour assurer l'atomicité.

Memcached, en revanche, ne fournit pas de gestion des transactions.

Réplication

Redis offre une simple réplication leader-suiveur (maître-esclave) qui crée des copies exactes des instances maîtres, avec ces fonctionnalités :

  • Le maître continue d'envoyer des commandes de données à l'esclave tant qu'il est connecté.
  • Si la connexion est interrompue, l'esclave suivra une resynchronisation partielle en copiant uniquement les données qui ont été manquées lors de la déconnexion.
  • Si la resynchronisation partielle n'est pas possible, il tentera une resynchronisation complète.

Vous pouvez également tirer parti des fonctionnalités de haute disponibilité, Redis Sentinels ou Redis Cluster, pour une protection avancée contre le basculement.

Native Memcached ne prend pas en charge la réplication, mais vous pouvez utiliser Repcached, un correctif open source gratuit pour obtenir une haute disponibilité pour votre déploiement. Il offre une réplication multimaître, une réplication de données asynchrone et prend en charge toutes les commandes Memcached.

Instantanés/Persistance

Les instantanés sont simplement une vue en lecture seule de votre base de données telle qu'elle était à un certain moment. Redis prend en charge les instantanés et, par défaut, Redis enregistre les instantanés de l'ensemble de données sur le disque dans un fichier binaire appelé dump.rdb. Vous pouvez appeler manuellement un instantané, personnaliser la fréquence ou modifier le seuil d'exécution de l'opération.

Voici les deux options de persistance prises en charge par Redis :

  • Persistance RDB
  • Persistance AOF

RDB signifie « Sauvegarde de la base de données Redis ». Il s'agit d'un instantané compact et ponctuel de la base de données à un moment précis. Il prend moins de place, maximise les performances de Redis et convient à la reprise après sinistre.

AOF signifie "Append Only File". AOF garde une trace de toutes les commandes exécutées et, dans une situation désastreuse, il réexécute les commandes pour récupérer les données. Cette méthode prend plus d'espace car toutes les commandes sont exécutées à nouveau, et n'est pas une méthode très durable de création d'instantanés.

Memcached, en revanche, ne prend pas en charge la persistance sur disque.

Scripts côté serveur

Lua est le langage de script intégré pour votre serveur Redis, disponible à partir de la version 2.6, qui vous permet d'effectuer des opérations à l'intérieur de Redis pour simplifier votre code et augmenter les performances. Les deux principales fonctions utilisées pour évaluer les scripts utilisant l'interpréteur Lua sont :

  • ÉVAL
  • EVALSHA

Lorsque le script Lua est exécuté, toutes les autres requêtes sont bloquées, comme indiqué dans la figure ci-dessous.

Redis inclut également le débogueur de scripts Lua dans la version 3.2, ce qui facilite l'écriture de scripts complexes et contribue à améliorer les performances.

Memcached ne prend en charge aucun script côté serveur.

Évolutivité

Il existe deux techniques pour mettre à l'échelle horizontalement votre base de données Redis :

  • Ajout de partitions dans les clusters Redis
  • Ajout de nœuds à une configuration Redis HA (maître/réplica)

Vous pouvez également mettre à l'échelle verticalement votre configuration Redis lorsque vous avez besoin de plus de mémoire ou de calcul. Cela peut être fait sans temps d'arrêt si vous avez une configuration HA ou si vous utilisez la technologie Redis Cluster.

Le serveur Memcached ne fournit pas de mécanisme pour distribuer les données entre les nœuds (sharding). Ainsi, dans Memcached, l'évolutivité horizontale est aussi simple que d'ajouter plus de nœuds - le problème du partitionnement de vos données en différents fragments devra être résolu au niveau de l'application/du client. Il existe des outils open source qui peuvent vous aider.

Protocole de communication

Redis utilise TCP comme protocole réseau et ne prend pas en charge UDP.

Memcached prend en charge les protocoles de communication TCP et UDP. Les données sont envoyées au serveur Memcached sous deux formes :

  • Lignes de texte :envoyez des commandes et recevez des réponses du serveur.
  • Données non structurées :recevez ou envoyez des informations de valeur pour une clé donnée, et les données sont renvoyées dans le même format que celui fourni.

Politiques d'éviction de cache prises en charge

Redis prend en charge différents types de politiques d'expulsion. Jetons un coup d'œil à certains.

  • pas d'expulsion :  Dans "noeviction", une erreur est renvoyée lorsque la mémoire atteint sa limite.
  • allkeys-lru :  Lru signifie "moins récent utilisé". Cette règle supprime les données les moins récemment utilisées.
  • allkeys-lfu :  Lfu signifie "le moins fréquemment utilisé". Cette règle supprime les données les moins fréquemment utilisées.
  • toutes les touches aléatoires :  Cette politique supprime les données de manière aléatoire.
  • volatile-lru :  Les données volatiles sont avec un ensemble de données d'expiration. Cette règle supprime les données volatiles les moins récemment utilisées.
  • volatile-lfu :  Les données volatiles sont avec un ensemble de données d'expiration. Cette règle supprime les données volatiles les moins fréquemment utilisées.
  • volatile-aléatoire :  Cette règle supprime les données volatiles de manière aléatoire.
  • volatile-ttl :  « TTL » signifie le temps de vivre. Cette règle supprime les données dont la durée de vie est la plus courte.

Memcached utilise l'algorithme LRU pour expulser les données lorsque l'espace est requis. Il recherche d'abord les données déjà expirées à supprimer si les données expirées ne sont pas disponibles, l'algorithme LRU est utilisé.

Publier et s'abonner aux messages

Redis prend en charge la messagerie Pub/Sub (publier et s'abonner). Trois commandes sont utilisées à cette fin.

Le client utilise :

  • S'abonner
  • Se désinscrire

L'abonnement et le désabonnement sont utilisés pour recevoir des messages d'un canal spécifique.

Le serveur utilise :

  • Publier

Le « publier » est utilisé pour pousser les données vers les clients.

Memcached ne prend pas en charge la messagerie de publication et d'abonnement.

Prise en charge des flux

Redis prend en charge les flux de type Kafka avec la version 5.0 ou supérieure à l'aide d'une nouvelle structure de données « Redis Streams ». Redis Streams utilise le concept de groupes de consommateurs, comme Apache Kafka, qui permet aux applications clientes de consommer des messages de manière distribuée, ce qui facilite la mise à l'échelle et la création de systèmes hautement disponibles.

Memcached n'offre pas de support natif pour les flux, mais il existe des outils de bibliothèque open source comme Kafcache pour le traitement des flux à faible latence.

Assistance géospatiale

Redis possède une structure de données appelée Index géospatiaux qui stocke les données de longitude et de latitude d'un emplacement. Vous pouvez effectuer différentes opérations sur les données géospatiales, comme calculer la distance entre deux points ou rechercher des lieux proches.

Memcached n'a pas de structures de données spéciales pour gérer les données géospatiales.

Performances

Une comparaison des performances entre les magasins de données de valeurs-clés en mémoire est plus un exercice intellectuel qu'une importance pratique, à moins que vous ne déployiez des systèmes à une telle échelle que cela devienne intéressant car une mesure d'économie. En effet, ces magasins sont liés aux E/S et la latence du réseau peut généralement jouer un rôle plus important dans la latence perçue de l'application que la latence de la base de données.

Un aspect plus pratique des performances est l'efficacité du stockage - combien de données peuvent être stockées dans la même quantité de mémoire. Même ici, les structures de données internes utilisées par Redis varient en fonction de la taille des données. Par conséquent, toute discussion sur les performances entre ces bases de données doit être prise avec des pincettes.

Regardons quelques comparaisons présentées dans un document de recherche de 2016. Dans cet article, les auteurs expérimentent les bases de données en mémoire largement utilisées pour mesurer leurs performances en termes de :

  1. Le temps nécessaire pour terminer les opérations.
  2. L'efficacité avec laquelle ils utilisent la mémoire pendant les opérations.

Versions de bases de données utilisées dans l'article :

Base de données Version
Redis 3.0.7
Memcaché 1.4.14

Opération d'écriture

Lors de l'écriture des données, comme vous pouvez le voir, dans le tableau ci-dessous, Memcached affiche une vitesse exceptionnelle même après que le nombre d'enregistrements est passé à un million.

Le temps calculé pour écrire des paires clé-valeur (ms)

Nombre d'enregistrements
Base de données 1 000 10 000 100 000 1 000 000
Redis 34 214 1 666 14 638
Memcaché 23 100 276 2 813

Opération de lecture

La lecture des données reste presque cohérente dans Redis, même pour un million d'enregistrements, mais dans Memcached, à mesure que le nombre d'enregistrements augmente, le temps augmente également un peu.

Le temps écoulé pour lire la valeur correspondant à une clé donnée par base de données (ms)

Nombre d'enregistrements
Base de données 1 000 10 000 100 000 1 000 000
Redis 8 6 8 8
Memcaché 9 14 14 30

Utilisation de la mémoire

Lorsque nous discutons de l'utilisation de la mémoire, Redis est toujours le meilleur, comme vous pouvez le voir dans les résultats.

Utilisations de la mémoire des bases de données en mémoire pour l'opération d'écriture (Mo)

Nombre d'enregistrements
Base de données 1 000 10 000 100 000 1 000 000
Redis 2,5 3.8 4.3 62,7
Memcaché 5.3 27,2 211 264,9

Comme vous pouvez le voir, Redis est meilleur que Memcached.

Utilisations de la mémoire des bases de données en mémoire pour l'opération de suppression (Mo)

Nombre d'enregistrements
Base de données 1 000 10 000 100 000 1 000 000
Redis 0 0 0 0
Memcaché 2.2 2.1 2.2 2.2

Services gérés/Assistance

La plus grande popularité et communauté de Redis a également entraîné le besoin de services gérés, d'hébergement et de support. Les fournisseurs de bases de données gérées populaires pour Redis™* incluent ScaleGrid, Redis Labs, AWS Elasticache, Azure Cache et DigitalOcean. Cette page fournit une excellente comparaison des meilleurs fournisseurs pour Redis™. Redis dispose également de nombreux outils de création de rapports internes tels que les accès au cache, l'utilisation de la mémoire, les opérations et même une requête lente enregistrée.

Les services gérés pour Memcached sont beaucoup moins disponibles, mais sont toujours pris en charge via Amazon Elasticache.

Prise en charge de la sécurité de la couche de transport (TLS)

Redis a une prise en charge native de TLS à partir de Redis 6.0. Les versions antérieures de Redis recommandaient l'utilisation de stunnel pour fournir une prise en charge TLS.

Memcached 1.5.13 et les versions supérieures prennent en charge l'authentification et le chiffrement via TLS. Cette fonctionnalité est encore en phase expérimentale.

Authentification

Jusqu'à Redis 5.x, Redis ne prenait en charge qu'une simple authentification basée sur un mot de passe. Ce mot de passe était stocké en clair sur le serveur. Redis à partir de la version 6.0 prend en charge une liste de contrôle d'accès complète.

Memcached version 1.4.3 et supérieure prend en charge SASL. Auparavant, Memcached n'avait pas de couche d'authentification.

Résumé

Redis et Memcached sont tous deux excellents et ont des applications dans différents domaines. Redis développé plus tard a de nombreuses fonctionnalités avancées et dispose d'une excellente documentation et communauté.

Vous souhaitez en savoir plus sur ScaleGrid ?

Pour en savoir plus sur la façon dont ScaleGrid Hosting for Redis™* peut vous aider à gérer vos bases de données, consultez notre page ScaleGrid Service for Redis™. Découvrez comment l'hébergement ScaleGrid pour Redis™ peut vous permettre de vous concentrer davantage sur le développement de votre produit, et moins sur la gestion des bases de données.

*Redis est une marque commerciale de Redis Labs Ltd. Tous les droits y afférents sont réservés à Redis Labs Ltd. Toute utilisation par ScaleGrid est uniquement à des fins de référence et n'indique aucun parrainage, approbation ou affiliation entre Redis et ScaleGrid.