Connaissances essentielles et scénarios d'application des types de données Redis

Redis est basé sur des paires clé-valeur et son type de clé est en fait un objet, de sorte que le type de données dit redis est en fait le type de données valeur. Du point de vue général, il existe principalement les cinq types suivants:

  1. chaîne
  2. liste
  3. hacher
  4. ensemble
  5. sorted_set

chaîne

Le type de chaîne doit être le plus couramment utilisé dans redis. Il peut stocker des chaînes, des valeurs numériques et des bitmaps bitmap binaires.
Alors, que stocke réellement le type de chaîne? Il s'agit en fait d'un tableau d'octets . Redis propose de nombreuses commandes pour les opérations de type chaîne. Utilisez la commande de requête de longueur de chaîne pour vérifier s'il s'agit d'un caractère ou d'un octet.
Le processus de vérification consiste à stocker les caractères chinois sous différents codages de jeu de caractères, et vous constaterez que le STRLENrésultat de l' utilisation n'est pas le nombre de caractères, mais la longueur en octets du caractère correspondant sous le codage du jeu de caractères correspondant.

Le type chaîne peut stocker des chaînes , il fournit donc également de nombreuses fonctions de manipulation de chaînes de base et couramment utilisées, telles que l'épissage de chaînes append, la requête de longueur strlenet l'obtention de caractères à des positions spécifiques getrange.
Dans de nombreuses conceptions impliquant des systèmes d'autorisation, le type de chaîne est souvent utilisé pour stocker des jetons et une certaine période de validité est définie.

Les opérations ci-dessus et les opérations suivantes peuvent helpêtre interrogées dans redis-cli , par exemple, pour interroger les fonctions prises en charge par string, vous pouvez l'utiliser help @string.

Le type chaîne peut stocker des valeurs , il fournit donc également de nombreuses fonctions d'opération pour les valeurs, telles que l'ajout d'une incr, la soustraction d'une decr, l'ajout d'une valeur spécifique incrby, la soustraction d'une valeur spécifique, decrbyetc.
Cette fonction aura une bonne application dans les scénarios d'entreprise tels que le nombre de visites, de commentaires, en ligne et hors ligne de certaines fonctions de certains systèmes.

Le type chaîne peut stocker des bitmaps et fournit également de nombreuses opérations sur les bitmaps, telles que la définition de bitmaps setbit, l'obtention de données getbitbitmap, des statistiques bitmap bitcountet des statistiques composites bitop.
Bitmap est une opération basée sur des bits binaires. Elle peut utiliser une petite mémoire pour représenter une grande quantité de données. Elle est très utile pour de nombreuses entreprises statistiques, telles que les statistiques de données pour des scénarios spécifiques tels que des semaines, des mois et des jours.
Il convient de noter que le décalage dans le bitmap est limité et ne peut pas dépasser la limite maximale de Integer, sinon une exception sera levée et le stockage échouera.

Lorsque vous définissez la valeur du type de chaîne, vous pouvez utiliser une seule opération setou une opération multi-éléments mset. Que ce soit une opération à un seul élément ou une opération multi-éléments, il y a une opération avec une extrémité arrière nx. Ce soutien de fonctionnement nxet les xxopérations, on est La valeur ne peut être définie avec succès que lorsque la clé n'existe pas. La première est que la valeur ne peut être définie avec succès que lorsque la clé existe.
Cette fonction peut garantir l'atomicité des données dans une certaine mesure, elle est donc souvent utilisée pour les verrous distribués dans les scénarios d'application distribuée. (Pour être précis, l'atomicité est garantie pour les opérations multi-éléments. Comme Redis est mono-processus et mono-thread, il n'y a pas de problème d'atomicité pour les opérations mono-élément)

liste

Le type de liste est également un type très couramment utilisé dans redis. La clé de type de liste possède des attributs head et tail, qui pointent respectivement vers le premier et le dernier élément de la liste. Cette conception permet au type de liste de simuler une variété de structures de données couramment utilisées.

Pour stocker des éléments dans la liste, vous pouvez choisir d'ajouter des données à partir de la gauche ou de la droite, vous pouvez également choisir linsertcette opération pour insérer des données à un emplacement spécifique, ou vous pouvez utiliser lsetcette opération pour remplacer les données à un emplacement spécifique.
La méthode ci-dessus de poussée supplémentaire a une opération de données contextuelle correspondante, vous pouvez choisir de retirer dans la même direction, ou vous pouvez choisir de retirer à l'envers.
Pour l'opération d'extraction dans le même sens, c'est-à-dire lpushsomme lpopet rpushsomme rpop, le résultat de cette opération est le dernier entré, premier sorti, tout comme la conception de la structure de données de la pile en java .
L'extraction inversée, c'est-à-dire lpushcorrespondante rpopou rpushcorrespondante lpop, le résultat de cette opération est le premier entré premier sorti, appelé FIFO, juste la même structure de données que la file d'attente en java .
Et linsert, lsetcette opération est la même que l'opération de structure de tableau en java .
Parallèlement, la liste prend également en charge le blocage asynchrone. Par exemple blpop, brpopcette opération bloquera le client jusqu'à ce que le tableau de clés correspondant soit récupéré. Cette opération peut répondre à certaines exigences commerciales d'abonnement monodiffusion.
Dans le type liste, les éléments peuvent être répétés, et à partir de l'ordre dans lequel ils peuvent être pris, on peut voir qu'ils sont classés, et cet ordre est l'ordre dans lequel les données sont stockées.
En résumé, le type de liste redis peut remplacer certaines API et structures de données couramment utilisées en Java, et peut mieux garantir la fiabilité des données dans une certaine mesure.

Le type de liste comporte de nombreuses opérations, qui ne sont pas limitées à celles répertoriées ci-dessus. À l'instar du type de chaîne, vous pouvez également utiliser la help @listméthode pour interroger la documentation d'aide fournie avec redis et apprendre la correspondance réelle lorsque vous en avez besoin.

hacher

Redis lui-même est une structure clé-valeur. Le hachage signifie ici que la valeur elle-même est une paire clé-valeur. Cette structure est comme un hashmap imbriqué dans un hashmap en java.
Par conséquent, le type de hachage de la valeur lui-même est exactement comme le type de chaîne de redis, mais en fait la plupart des opérations de hachage sont très similaires à celles du type String.
De la commande d'opération, c'est presque un hcaractère ajouté avant la commande correspondante de string. L'opération de stockage des données consiste à ajouter une clé interne sur la base de la clé d'origine, mais le nom standard ici est field.
Get récupère les données, set enregistre les données, et les opérations d'addition et de soustraction des valeurs sont très similaires aux chaînes.

Cette structure de hachage est très adaptée pour un objet, plusieurs attributs, ce type de stockage de données. Par exemple, le stockage de certains attributs de produits populaires et le stockage des données de condition d'un certain véhicule sur l'Internet des véhicules peuvent réduire le fonctionnement de la base de données lorsque les données populaires sont utilisées, et en même temps peuvent modifier les données de manière pratique et efficace.

ensemble

En termes d'accès simple aux données, le type de liste et le type d'ensemble dans redis sont en fait très similaires à la liste et définis en java. En java, les listes et les ensembles sont des collections et des conteneurs, qui peuvent stocker de nombreux autres types. Les choses sont à l'intérieur, la différence est que les listes permettent la répétition et sont ordonnées, tandis que les ensembles ne permettent pas la répétition.
Quant à la question de l'ordre des ensembles, il existe de nombreuses sous-classes d'ensembles en Java, certaines sont désordonnées et d'autres sont ordonnées, elles ne peuvent donc pas être généralisées.
Dans redis, similaire à java, set n'est pas autorisé à être répété, mais l'ensemble ici est désordonné.
L'ensemble n'autorise pas les fonctionnalités répétitives et comporte de nombreux scénarios d'application. Par exemple, il peut être utilisé pour compter les utilisateurs en ligne sur une certaine période, et les utilisateurs qui sont en ligne plusieurs fois peuvent être directement supprimés.

Outre les caractéristiques du type de données d'ensemble lui-même, redis fournit également des commandes API utiles pour ce type. Par exemple, sintervous pouvez prendre l'intersection de deux ensembles de données, sdiffla différence de suniondeux ensembles et l' union de deux ensembles. ensemble.
Il convient de noter ici qu'il sdiffexiste en fait une direction, qui sera basée sur le contenu de la touche la plus à gauche, de sorte que la direction réelle doit être contrôlée par vous-même lorsque vous devez l'utiliser.
De plus, les trois opérations ci-dessus sont toutes associées à une storeopération. Cette opération doit fournir une clé supplémentaire, et les résultats de l'intersection, de l'union et de la différence seront stockés dans cette clé supplémentaire.

Le type set a aussi une très bonne opération, qui peut générer un certain nombre aléatoire en fonction d'une clé donnée. La commande est srandmemberque cette opération nécessite un paramètre clé et un nombre, qui est le nombre de nombres aléatoires générés.
Ce nombre est très particulier: s'il s'agit d'un nombre positif et inférieur au nombre d'éléments de l'ensemble lui-même, il renverra aléatoirement un nombre donné de données uniques. S'il s'agit d'un nombre positif et supérieur au nombre d'éléments dans l'ensemble lui-même, les données des données données seront renvoyées, mais il y aura duplication. S'il s'agit d'un nombre négatif et est inférieur au nombre d'éléments de l'ensemble lui-même, le résultat peut être répété ou non. S'il est négatif et supérieur au nombre d'éléments dans l'ensemble lui-même, la quantité de données donnée sera également renvoyée et il y aura duplication.
Au-dessus de cette fonction, il convient à un code similaire, comme les scénarios commerciaux de loterie.

Pour set, il y a une opération qui nécessite une attention, c'est-à-dire que smemberscette opération peut lister tous les éléments sous une certaine clé, mais c'est une opération qui consomme du débit redis et doit être utilisée avec précaution.

sorted_set

Sorted_set est un ensemble ordonné d'ensembles. En un sens, sorted_set ressemble plus à un complément à lister et à définir. La liste est ordonnée (ordre de stockage), mais ne se dédoublonne pas, tandis que l'ensemble est dé-dupliqué, mais désordonné.
Chacun de ces modèles a naturellement ses propres avantages et chacun a ses propres scénarios d'application, mais le besoin de répétition et d'ordre est également très courant, et sorted_set est un tel type, mais l'ordre ici est différent de la liste. Pas l'ordre de dépôt, mais le genre.

La déclaration ci-dessus est en fait une compréhension.On peut dire que sorted_set est un complément à lister et définir, ou il peut être considéré comme une synthèse. Parce que l'opération de sorted_set ressemble plus à une combinaison d'opérations de liste et d'ensemble, elle a des opérations d'intersection, d'union et de différence comme set, et elle a également des opérations qui bloquent la récupération de données comme list.
Mais la différence est que l'opération set dans sorted_set comporte également des opérations de pondération et d'agrégation, qui peuvent prendre le maximum, le minimum et la somme, ce qui lui permet également d'avoir plus de scénarios d'application.

sorted_set est un type ordonné avec tri. Le tri ici doit recevoir un score lors du stockage des données. Cette valeur de point peut déterminer l'ordre des éléments correspondants, mais cette valeur de point ne signifie pas qu'elle ne changera pas si elle est donnée, elle peut être ajoutée et soustraite, et une fois la valeur de point activée, l'ordre correspondant changera également en même temps.
Cette fonctionnalité est très appropriée pour certaines opérations de données de classement en temps réel, telles que les classements de chansons, les classements de blogs, les classements de ventes, etc.

De manière générale, s'il y a un tri, il y aura une autre maintenance supplémentaire des données, ce qui conduira inévitablement à une faible efficacité dans les mêmes circonstances.
La particularité de sorted_set est que la structure de stockage sous-jacente est skip list skip table, cette structure stocke plus de contenu que la clé de l'ensemble, ce qui améliore l'efficacité de sorted_sort (détails de structure spécifiques à ajouter)

Articles Liés

Connaissances de base liées à la mise en cache et à Redis
Installation de Redis Linux et à l'installation de logiciels Points de connaissance Linux
relatifs au type de données Redis Connaissances clés et scénarios d'application
Redis Pipeline, transaction, publication et abonnement, expiration, filtre et autres fonctions avancées courantes (partie 1)
Redis pipeline, Une petite note des fonctions avancées couramment utilisées telles que les transactions, la publication et l'abonnement, l'expiration, les filtres, etc. (Partie 2)
Intégration de Springboot et utilisation des fonctions communes de Redis

Je suppose que tu aimes

Origine blog.csdn.net/tuzongxun/article/details/107371302
conseillé
Classement