Redis 6: une base de données, un cache et un courtier de messages à haut débit

Comme beaucoup, vous pourriez penser que Redis n'est qu'un cache. Ce point de vue est dépassé.

Essentiellement, Redis est un magasin de structure de données en mémoire NoSQL qui peut persister sur le disque. Il peut fonctionner comme une base de données, un cache et un courtier de messages. Redis a une réplication intégrée, des scripts Lua, une éviction LRU, des transactions et différents niveaux de persistance sur disque. Il offre une haute disponibilité via Redis Sentinel et un partitionnement automatique avec Redis Cluster.

Le modèle de données principal de Redis est la valeur-clé, mais de nombreux types de valeurs sont pris en charge: chaînes, listes, ensembles, ensembles triés, hachages, flux, HyperLogLogs et bitmaps. Redis prend également en charge les index géospatiaux avec des requêtes de rayon et des flux.

[Aussi sur: Comment Redis a rayé et démangé - et a changé les bases de données pour toujours]

Pour ouvrir Redis, Redis Enterprise ajoute des fonctionnalités pour une vitesse, une fiabilité et une flexibilité supplémentaires, ainsi qu'une base de données cloud en tant que service. Redis Enterprise évolue linéairement jusqu'à des centaines de millions d'opérations par seconde, a une distribution mondiale active-active avec une latence locale, propose Redis sur Flash pour prendre en charge de grands ensembles de données au coût d'infrastructure d'une base de -en durabilité et basculement à un chiffre en secondes.

En outre, Redis Enterprise étend la fonctionnalité de base de Redis pour prendre en charge toute méthode de modélisation de données avec des modules tels que RediSearch, RedisGraph, RedisJSON, RedisTimeSeries et RedisAI, et permet d'exécuter des opérations entre et entre les modules et le cœur. Tout cela est fourni tout en maintenant la latence de la base de données sous une milliseconde.

Fonctionnalités et cas d'utilisation de Core Redis

Qu'est-ce que cela signifie que Redis peut désormais fonctionner comme une base de données, un cache et un courtier de messages? Et quels sont les cas d'utilisation pris en charge par ces rôles?

Le cache est la fonction classique de Redis. Essentiellement, Redis se trouve devant une base de données sur disque et enregistre les requêtes et les résultats; l'application vérifie d'abord le cache Redis pour les résultats stockés et interroge la base de données sur disque pour les résultats qui ne sont pas actuellement dans le cache. Compte tenu du taux de réponse inférieur à la milliseconde de Redis, il s'agit généralement d'une grande victoire pour les performances des applications. Les minuteries d'expiration et l'éviction LRU (la moins récemment utilisée) du cache Redis aident à maintenir le cache à jour et à utiliser efficacement la mémoire.

Le magasin de sessions est une partie importante des applications Web modernes. C'est un endroit pratique pour conserver des informations sur l'utilisateur et ses interactions avec l'application. Dans une architecture de batterie de serveurs Web, l'hébergement du magasin de sessions directement sur le serveur Web nécessite de faire «coller» l'utilisateur au même serveur principal pour les demandes futures, ce qui peut limiter l'équilibreur de charge. L'utilisation d'une base de données sur disque pour le magasin de sessions supprime la nécessité de lier une session à un serveur Web unique, mais introduit une source supplémentaire de latence. L'utilisation de Redis (ou de toute autre base de données en mémoire rapide) comme magasin de session se traduit souvent par une architecture d'application Web à faible latence et à haut débit.

Redis peut fonctionner comme un courtier de messages en utilisant trois mécanismes différents, et l'un des cas d'utilisation importants de Redis en tant que courtier de messages est d'agir comme un lien entre les microservices. Redis dispose d'un mécanisme de notification de publication / abonnement à faible coût qui facilite les messages d'incendie et d'oubli, mais ne peut pas fonctionner lorsque le service de destination n'écoute pas. Pour une file d'attente de messages plus persistante, semblable à Kafka, Redis utilise des flux, qui sont des paires clé-valeur ordonnées par horodatage dans une seule clé. Redis prend également en charge les listes d'éléments à double lien stockées sur une seule clé, qui sont utiles en tant que file d'attente FIFO (premier entré / premier sorti). Les microservices peuvent, et le font souvent, utiliser Redis comme cache et l'utiliser comme courtier de messages, bien que le cache doive s'exécuter dans une instance distincte de Redis de la file d'attente de messages.

La réplication de base permet à Redis d'évoluer sans utiliser la technologie de cluster de la version Redis Enterprise. La réplication Redis utilise un modèle leader-suiveur (également appelé maître-esclave), qui est asynchrone par défaut. Les clients peuvent forcer la réplication synchrone à l'aide d'une commande WAIT, mais même cela ne rend pas Redis cohérent entre les réplicas.

Redis dispose de scripts Lua côté serveur, permettant aux programmeurs d'étendre la base de données sans écrire de modules C ou de code côté client. Les transactions Redis de base permettent à un client de déclarer une séquence de commandes comme une unité non interruptible, en utilisant les commandes MULTI et EXEC pour définir et exécuter la séquence. Ce n'est pas la même chose que les transactions relationnelles avec annulations.

Redis a différents niveaux de persistance sur disque que l'utilisateur peut sélectionner. La persistance RDB (fichier de base de données Redis) prend des instantanés instantanés de la base de données à des intervalles spécifiés. La persistance AOF (fichier d'ajout uniquement) enregistre chaque opération d'écriture reçue par le serveur. Vous pouvez utiliser la persistance RDB et AOF pour une sécurité maximale des données.

Redis Sentinel, lui-même un système distribué, offre une haute disponibilité pour Redis. Il surveille les instances de maître et de réplique, la notification en cas de problème et le basculement automatique si le maître cesse de fonctionner. Il sert également de fournisseur de configuration pour les clients.

Redis Cluster fournit un moyen d'exécuter une installation Redis où les données sont automatiquement réparties sur plusieurs nœuds Redis. Redis Cluster fournit également un certain degré de disponibilité pendant les partitions, bien que le cluster cesse de fonctionner si la majorité des maîtres deviennent indisponibles.

Comme je l'ai mentionné précédemment, Redis est un magasin clé-valeur qui prend en charge les chaînes, les listes, les ensembles, les ensembles triés, les hachages, les flux, les HyperLogLogs et les bitmaps en tant que valeurs. L'un des cas d'utilisation les plus simples et les plus courants consiste à utiliser des valeurs entières comme compteurs. À l'appui de cela, INCR (incrémentation), DECR (décrémentation) et d'autres opérations uniques sont atomiques, et donc sûres dans un environnement multi-client. Dans Redis, lorsque les clés sont manipulées, elles seront automatiquement créées si elles n'existent pas déjà.

> SET connexions 10

D'accord

> Connexions INCR

(entier) 11

> Connexions INCR

(entier) 12

> Connexions DEL

(entier) 1

> Connexions INCR

(entier) 1

> Connexions INCRBY 100

(entier) 101

> Connexions DECR

(entier) 100

> Connexions DECRBY 10

(entier) 90

Les autres types de structures de valeurs ont également leurs propres exemples dans le didacticiel Try Redis. Le tutoriel était en cours de maintenance lorsque je l'ai essayé moi-même; Je m'attends à ce que cela soit corrigé bientôt, car Redis Labs s'est impliqué dans ce qui était à l'origine un effort communautaire.

Il existe un certain nombre de modules complémentaires pour Redis, notamment (par ordre décroissant de popularité) un module de réseau neuronal, une recherche en texte intégral, SQL, un type de données JSON et une base de données de graphiques. Les licences des modules sont définies par les auteurs. Certains des modules qui fonctionnent avec Redis sont principalement des modules pour Redis Enterprise.

Améliorations de Redis Enterprise

En utilisant une architecture de cluster sans partage, Redis Enterprise offre une évolutivité linéaire infinie sans imposer de frais généraux non linéaires dans une architecture évolutive. Vous pouvez déployer plusieurs instances Redis sur un seul nœud de cluster, pour tirer pleinement parti de l'architecture informatique multicœur. Redis Enterprise a démontré une évolutivité à des centaines de millions d'opérations par seconde avec cinq neuf (99,999%) de disponibilité. Redis Enterprise effectue un re-sharding et un rééquilibrage automatiques tout en maintenant une faible latence et un débit élevé pour les charges transactionnelles.

Redis Enterprise propose un déploiement actif-actif pour les bases de données distribuées à l'échelle mondiale, permettant des opérations de lecture et d'écriture simultanées sur le même jeu de données sur plusieurs emplacements géographiques. Pour rendre cela plus efficace, Redis Enterprise peut utiliser des types de données répliquées (CRDT) sans conflit pour maintenir la cohérence et la disponibilité des données. Riak et Azure Cosmos DB sont deux autres bases de données NoSQL qui prennent en charge les CRDT.

Bien qu'il existe une vaste littérature académique sur les CRDT, j'avoue que je ne comprends pas complètement comment ni pourquoi ils fonctionnent. Le bref résumé de ce qu'ils font est que les CRDT peuvent résoudre les incohérences sans intervention, en utilisant un ensemble de règles dérivées mathématiquement. Les CRDT sont utiles pour les données à volume élevé qui nécessitent un état partagé et peuvent utiliser des serveurs dispersés géographiquement pour réduire la latence pour les utilisateurs.

L'une des principales différences entre Redis et Redis Enterprise est que Redis Enterprise dissocie le chemin des données de la gestion des clusters. Cela améliore le fonctionnement des deux composants. Le chemin des données est basé sur plusieurs proxys multithreads sans latence qui résident sur chacun des nœuds du cluster pour masquer la complexité sous-jacente du système. Le gestionnaire de cluster est une fonction de gouvernance qui fournit des fonctionnalités telles que le redistribution, le rééquilibrage, le basculement automatique, la détection du rack, le provisionnement de base de données, la gestion des ressources, la configuration de la persistance des données, la sauvegarde et la restauration. Étant donné que le gestionnaire de cluster est entièrement découplé des composants du chemin de données, les modifications apportées à ses composants logiciels n'affectent pas les composants du chemin de données.

Redis on Flash est une fonctionnalité Redis Enterprise qui peut réduire considérablement le coût du matériel pour Redis. Au lieu d'avoir à payer par le nez pour des téraoctets de RAM ou de restreindre la taille de vos ensembles de données Redis, vous pouvez utiliser Redis sur Flash pour placer les données chaudes fréquemment consultées en mémoire et les valeurs plus froides dans la mémoire Flash ou persistante, comme Intel Optane DC.

Les modules Redis Enterprise incluent RedisGraph, RedisJSON, RedisTimeSeries, RedisBloom, RediSearch et RedisGears. Tous les modules Redis Enterprise fonctionnent également avec Redis open source.

Quoi de neuf dans Redis 6?

Redis 6 est une grande version, à la fois pour la version open source et la version commerciale de Redis Enterprise. La nouvelle en termes de performances est l'utilisation d'E / S filetées, ce qui donne à Redis 6 une amélioration de la vitesse par rapport à Redis 5 (qui n'était pas en reste). Cela se poursuit dans Redis Enterprise, qui offre des améliorations de vitesse supplémentaires pour les clusters, comme décrit ci-dessus.

L'ajout de listes de contrôle d'accès (ACL) donne à Redis 6 le concept d'utilisateurs et permet aux développeurs d'écrire du code plus sécurisé. Redis Enterprise 6 s'appuie sur les ACL pour offrir un contrôle d'accès basé sur les rôles (RBAC), ce qui est plus pratique pour les programmeurs et les DBA.

Nouvelles fonctionnalités majeures de Redis 6

Redis 6.0 open source

  • Listes de contrôle d'accès (ACL)
  • Expulsions améliorées
  • E / S filetées
  • Protocole RESP3

Redis Enterprise 6.0

  • Contrôle d'accès basé sur les rôles (RBAC)
  • Extension active-active
  • HyperLogLog
  • Ruisseaux

Redis Enterprise 6.0 ajoute la prise en charge du type de données Streams dans les bases de données actives-actives. Cela permet à la fois une haute disponibilité et une faible latence tout en lisant et en écrivant simultanément vers et depuis un flux en temps réel dans plusieurs centres de données dans plusieurs emplacements géographiques.

RedisGears est un framework dynamique qui permet aux développeurs d'écrire et d'exécuter des fonctions qui implémentent des flux de données dans Redis. Il permet aux utilisateurs d'écrire des scripts Python à exécuter à l'intérieur de Redis et permet un certain nombre de cas d'utilisation, notamment l'écriture différée (Redis agit comme une interface vers une base de données sur disque), le traitement des données en temps réel, le streaming et le traitement d'événements, les opérations qui traversent les structures et modèles de données et les transactions basées sur l'IA

RedisAI est un moteur de service de modèle qui fonctionne à l'intérieur de Redis. Il peut effectuer des inférences avec les modèles PyTorch, TensorFlow et ONNX. RedisAI peut fonctionner sur des processeurs et des GPU, et permet des cas d'utilisation tels que la détection de fraude, la détection d'anomalies et la personnalisation.

Installation de Redis

Vous pouvez installer Redis en téléchargeant et en compilant une archive tar source ou en extrayant une image Docker du Docker Hub. Redis peut être compilé et utilisé sous Linux, MacOS, OpenBSD, NetBSD et FreeBSD. Le référentiel de code source est sur GitHub. Sous Windows, vous pouvez exécuter Redis dans un conteneur Docker ou sous le sous-système Windows pour Linux (WSL), qui nécessite Windows 10.

Vous pouvez installer Redis Enterprise sur Linux ou dans des conteneurs Docker. Les téléchargements Linux se présentent sous la forme de packages binaires (DEB ou RPM selon la saveur de Linux) et de scripts shell Bash pour l'installation du cluster. Les scripts vérifient les quatre cœurs requis et 15 Go de RAM pour l'installation.

Redis Enterprise Cloud

Le moyen le plus rapide d'installer Redis Enterprise n'est pas du tout de l'installer, mais plutôt de l'exécuter dans Redis Enterprise Cloud. Lorsque j'ai essayé cela moi-même à des fins de révision, j'ai initialement reçu une instance Redis 5; J'ai dû demander une mise à niveau vers Redis 6.