Maison  >  Article  >  base de données  >  Analyse approfondie de la structure des données dans Redis et discussion de scénarios d'application

Analyse approfondie de la structure des données dans Redis et discussion de scénarios d'application

青灯夜游
青灯夜游avant
2022-01-18 09:51:451989parcourir

Cet article vous donnera une compréhension approfondie des structures de données dans Redis et verra les scénarios d'application de ces structures de données. J'espère qu'il vous sera utile !

Analyse approfondie de la structure des données dans Redis et discussion de scénarios d'application

Types de données Redis et scénarios d'application

Redis est un système de stockage clé-valeur écrit en langage ANSI C. Le type de clé est une chaîne. [Recommandations associées : Tutoriel vidéo Redis]

8 types de données de types de données de valeur :

  • Types de données courants

    • string string type

    • list list type

    • set collection type

    • sortedset(zset) type d'ensemble ordonné

    • type de hachage

  • type de données inhabituel

    • type de bitmap bitmap

    • type de localisation géographique

    • type de flux

  • Remarque

    Les commandes dans Redis ignorent la casse, (set SET), les touches n'ignorent pas la casse (NOM nom)

Analyse approfondie de la structure des données dans Redis et discussion de scénarios dapplication

string string type

La fonction String de Redis Exprime trois types de valeurs : chaîne, entier, flottant Le numéro de point 100.01 est une chaîne à six chiffres

Commandes communes

decrdecr keydécrémenter le nombredecrbydecrby key décrémenterdiminuer l'entier spécifié

Scénarios d'application

  • 1. Le cache d'objets

  • 2. Le cache à valeur unique

  • 3.

  • 4. Setnx est utilisé pour les verrous distribués

  • 5.

  • Exemples de méthodes courantes

  • dockerRedis:0>keys *
    dockerRedis:0>append testName 2
    "1"
    dockerRedis:0>exists testName
    "1"
    dockerRedis:0>append testName " 1234"
    "6"
    dockerRedis:0>get testName
    "2 1234"
    dockerRedis:0>set testName1 "testName1"
    "OK"
    dockerRedis:0>get testName1
    "testName1"
    dockerRedis:0>getset testName2 "testName2"
    null
    dockerRedis:0>get testName2
    "testName2"
    dockerRedis:0>strlen testName
    "6"
    dockerRedis:0>set incrTest "10"
    "OK"
    dockerRedis:0>incr incrTest
    "11"
    dockerRedis:0>get incrTest
    "11"
    dockerRedis:0>decr incrTest
    "10"
    dockerRedis:0>decrby incrTest 5
    "5"
    dockerRedis:0>mset set01 1 set02 2 set03 3
    "OK"
    dockerRedis:0>mget set01 set02 set03
    1) "1"
    2) "2"
    3) "3"
type de liste de liste

le type de liste de liste peut stocker des éléments ordonnés et répétables. L'obtention d'enregistrements près de la tête ou de la queue est extrêmement rapide. Le nombre d'éléments dans la liste peut aller jusqu'à 2. ^32-1 (4 milliards)

Commandes communes

Nom de la commande

Nom de la commande Format de la commande Description de la commande
set définir la valeur de la clé. attribuer une valeur
get get key get a value
getset getset key value get a value et attribuer une valeur
mset MSET key1 value1 key2 value2 .. keyN valueN Définissez plusieurs valeurs key sur leurs valeurs correspondantes.
mget MGET KEY1 KEY2 .. KEYN Renvoyer les valeurs​​de toutes (une ou plusieurs) clés données
EXPIRE EXPIRE les secondes clés Définir le délai d'expiration (secondes) d'une clé
append ajouter la valeur de la clé ajouter la valeur à la queue
strlen strlen key obtenir la longueur de la chaîne
setnx setnx la valeur de la clé quand valeur Utiliser l'affectation s'il n'existe pas
définir la valeur de la clé N P
Format de la commandeDescription de la commandelpushlpush key v1 v2 v3... Insérer la liste depuis la gauchelpop touche lpopSupprimer depuis le côté gauche de la listerpushrpush key v1 v2 v3...Insérer dans la liste depuis le côté droitrpopclé rpopSupprimez-la du côté droit de la listelpushxvaleur de la clé lpushxInsérez la valeur en tête de la listeblpopblpop délai d'expiration de la clé sur le côté gauche de la liste, en bloquant lorsque la liste est vide, vous pouvez définir le temps de blocage maximum en secondes llenllen keyObtenir le nombre d'éléments dans la listelrange lrange key start endRenvoie les éléments dans l'intervalle spécifié dans la liste. L'intervalle est spécifié par start et endlsetlset key index valueDéfinit l'élément à la position d'index de la liste. à la valeur de valuerpoplpushrpoplpush key1 key2Sortez du côté droit de la liste key1 et insérez-la dans le côté gauche de la liste key2rpushx rpushx keyinserts la valeur à la fin de la valeur de la listebrpopblpop key est supprimée du côté droit de la liste. Elle se bloque lorsque la liste est vide. Vous pouvez définir le délai de blocage maximum en secondes. lindexvaleur de clé lindexObtenez l'élément avec l'indice d'indice dans la liste L'index commence à 0. indexltrimltrim key start endÉlaguez la liste et ne conservez que le début à la fin. range endbrpoplpushbrpoplpushpop du côté droit de la liste key1 et l'insère dans le côté gauche de la liste key2, ce qui bloquera key1 key2linsertinsert key AVANT/APRÈS valeur pivotInsérer la valeur dans la liste à la valeur Avant ou après pivotScénarios d'application

1, Pile (pile) = LPUSH + LPOP

  • 2, Queue (file d'attente) = LPUSH + RPOP

  • 3, blocage MQ (file d'attente de blocage) = LPUSH + BRPOP

  • 4, liste d'utilisateurs, liste de produits, liste de révision

  • set type d'ensemble

    Set : le nombre maximum de membres dans un ensemble d'éléments unique et non ordonné est 2 ^ 32 - 1

Commandes communes

Nom de la commande

Format de la commandeDescription de la commandesaddsadd valeur de clé 1 valeur2 .... Enregistrez les éléments dans la clé de collection, si l'élément existe Ignorez, si la clé n'existe pas, créez-en une nouvellesremsrem key value1 value2 ....Supprimez les éléments de la clé de collectionsmemberssmembers keyObtenir tous les éléments de la collectionspopspop key countsélectionne le nombre d'éléments de la clé définie et les éléments sont supprimés de la clésrandmembersrandmember key countsélectionne le nombre d'éléments de la clé définie, et les éléments ne sont pas supprimés de la clé Supprimer scardscard keyObtenir le nombre d'éléments dans la clé définiesismembersismember key memberDéterminez si l'élément membre existe dans l'ensemble keysintersinter key 1 key2 key3Trouver l'intersection de plusieurs ensemblessdiffsdiff key1 key2 key3Trouver la différence entre plusieurs ensemblessunionsunion key1 key2 key3Trouver l'union de plusieurs ensembles

Scénarios d'application

  • Applet de loterie WeChat

  • J'aime, collections, tags Weibo

  • Weibo et WeChat suivent des modèles

  • Sélection de produits de commerce électronique

Type de collection commandée zset

Ensemble ordonné SortedSet(ZSet) : les éléments eux-mêmes ne sont pas ordonnés et ne sont pas répétés Chaque élément est associé à une partition (score), qui peut être triée par score. La partition peut être répétée

Commandes communes

. zremzcardzcountzincrbyzscorezrankzrange zrevrankzrevrangetype de hachage
zadd zadd key score1 member1 score2 member2 ... Ajouter des éléments avec des scores à la clé d'ensemble ordonnée
zrem key mem1 mem2 .... Supprimer des éléments de la clé d'ensemble ordonnée
zcard key Obtenir le nombre d'éléments dans l'ensemble ordonné
zcount key min max Renvoyer le nombre d'éléments dans l'ensemble dont la valeur de score est dans le [min,max] interval
zincrby key incrément member est le score du membre de l'élément dans la clé de l'ensemble ordonné plus incrément
zscore key member renvoie le score du membre de l'élément dans l'ordre set key
zrank key member Obtenez le classement du membre dans l'ensemble (du petit au grand par score)
zrange key start end Obtenez les éléments de la commande définir la clé de l'indice de début à l'indice d'arrêt dans l'ordre positif
zrevrank key member Obtenir le classement des membres de l'ensemble (du plus grand au plus petit par score)
zrevrange clé début fin Obtenez la clé définie ordonnée dans l'ordre inverse de l'indice de début à l'indice d'arrêt Éléments
Scénarios d'application Classements de clics, classements de ventes, classements d'attention

Le hachage Redis est une table de mappage de champ et de valeur de type chaîne, qui fournit des champs et un mappage des valeurs de champ. Chaque hachage peut stocker 2 ^ 32-1 paires clé-valeur (plus de 4 milliards).

Avantages

1. Les données similaires sont classées et intégrées pour le stockage, ce qui facilite la gestion des données

Analyse approfondie de la structure des données dans Redis et discussion de scénarios dapplication

    2. Par rapport aux opérations de chaîne, elles consomment moins de mémoire et de CPU
    • 3. Par rapport au stockage de chaînes Plus d'économie d'espace
    • Inconvénients

    • 1 La fonction d'expiration ne peut pas être utilisée sur les champs, mais ne peut être utilisée que sur les clés

  • 2. pour une utilisation à grande échelle
    • Commandes communes
    Nom de la commande
Format de la commande

Description de la commande

hmsethgethmgethsetnxhexistshgetallhdelhincrbyhlenCache d'objet
hset hset valeur du champ clé Stockage la valeur clé de une clé de table de hachage
champ de clé hmset1 valeur1 champ2 valeur2 Stocker plusieurs paires clé-valeur dans une clé de table de hachage
champ de clé hget Vérifiez si un champ existe
hmget key field1 field2... Obtenir une valeur de champ
hsetnx key field value Stocker la valeur clé d'une table de hachage inexistante
hex est clé déposée Juge si le fichier existe
hgetall key Obtenir plusieurs valeurs de champ
hdel key field1 field2... Supprimer le champ spécifié
champ clé hincrby dans crement incrémentation automatique du champ spécifié
hlen key Obtenir le nombre de champs
Scénario d'application

Fonctionnement du panier

    type bitmap bitmap
  • Bitmap effectue des opérations sur les bits pour représenter la valeur ou l'état correspondant à un élément via un bit, et la clé est l'élément correspondant lui-même. Bitmap lui-même permettra d'économiser considérablement de l'espace de stockage. "Commandes communes" être seulement 0 ou 1). "getbit key offset" clé bitpos value

  • Renvoie la première valeur d'index définie comme valeur de bit
  • bitop

bitop et[or/xor/not] destkey key [key...]

Effectuer des opérations logiques sur plusieurs clés et les enregistrer. Entrez destkey

Scénarios d'application

  • 1. Les utilisateurs s'enregistrent chaque mois, l'ID utilisateur est la clé et la date est décalée de 1 pour indiquer l'enregistrement
  • 2. est le décalage 1 pour indiquer actif
  • 3. Interrogez le statut en ligne de l'utilisateur. La date est la clé et l'ID utilisateur est le décalage 1, ce qui signifie en ligne

le type de localisation géographique

la géo est utilisée par Redis pour traiter la localisation. information. Officiellement utilisé dans Redis3.2. Utilisant principalement la courbe d'ordre Z, l'encodage Base32 et l'algorithme de géohash

geoaddgeoadd key longitude latitude nom du membre 1 longitude 1 latitude 1 nom du membre 2 longitude 2 latitude 2...Ajouter des coordonnées géographiquesgeoposgeopos key nom du membre 1 nom du membre 2...géodistecalculer la distance entre les membres Trouver des membres à proximité en fonction du membre Renvoyer la chaîne geohash standard 1 Enregistrer l'emplacement géographique 2. stream est une nouvelle structure de données après Redis 5.0, utilisée pour les files d'attente de messages persistantes. Génération sérialisée des identifiants de message Traversée des messages Lecture bloquante et non bloquante des messages

Retour latitude et longitude du membre


géodiste clé membre 1 membre 2 unité
georadiusbymember georadiusbymember clé valeur du membre nombre d'unités numéro asc[desc]
geohash nom du membre clé geohash 1 nom du membre 2...
Scénario d'application
3. Rechercher des "personnes à proximité" type de flux de données stream
Répond presque à toutes les exigences de la file d'attente des messages, notamment :

Consommation groupée des messages Traitement des messages inachevés

Surveillance de la file d'attente des messages

Chaque flux a un nom unique, qui est la clé de Redis. Il est automatiquement créé lorsque la commande xadd est utilisée pour la première fois pour ajouter un message

Scénarios d'application

Utilisation de la file d'attente des messages.

Plus de détails sur la programmation Pour plus de connaissances, veuillez visiter :
    Introduction à la programmation
  •  ! !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer