Maison base de données Redis Explication détaillée des types de liste et des commandes associées dans Redis

Explication détaillée des types de liste et des commandes associées dans Redis

Nov 27, 2019 pm 04:51 PM
redis 命令

Explication détaillée des types de liste et des commandes associées dans Redis

1. Présentation :

Dans Redis, le type List est une liste chaînée de chaînes triées par ordre d'insertion. Comme une liste chaînée ordinaire dans une structure de données, nous pouvons ajouter de nouveaux éléments à sa tête (à gauche) et à sa queue (à droite). Lors de l'insertion, si la clé n'existe pas, Redis créera une nouvelle liste chaînée pour la clé. (Recommandation : Tutoriel vidéo Redis)

En revanche, si tous les éléments de la liste chaînée sont supprimés, la clé sera également supprimée de la base de données. Le nombre maximum d'éléments pouvant être contenus dans une liste est de 4294967295.

Du point de vue de l'efficacité de l'insertion et de la suppression d'éléments, si nous insérons ou supprimons des éléments aux deux extrémités de la liste chaînée, ce sera une opération très efficace, même si des millions d'enregistrements ont été stockés dans la liste chaînée. Les opérations peuvent également être réalisées en temps constant.

Cependant, il convient de noter que si l'opération d'insertion ou de suppression d'élément est effectuée au milieu de la liste chaînée, elle sera très inefficace. Je pense que ce n’est pas difficile à comprendre pour les développeurs disposant d’une bonne base de structure de données.

2. Liste des commandes associées :

Prototype de commande Complexité temporelle Description de la commande Valeur de retour
Valeur de la clé LPUSH [valeur ...] O(1) Insérez toutes les valeurs données dans les paramètres dans l'en-tête de la valeur de liste associée à la clé spécifiée. Si la clé n'existe pas, cette commande créera une liste chaînée vide associée à la clé avant l'insertion, puis insérera les données de l'en-tête de la liste chaînée. Si la valeur de la clé n'est pas de type liste chaînée, cette commande renverra des informations d'erreur pertinentes. Le nombre d'éléments dans la liste chaînée après insertion.
Valeur de la clé LPUSHX O(1) Uniquement lorsque la Clé spécifiée dans le paramètre existe, la commande lui sera associée La tête de la valeur de liste est inséré dans la valeur donnée dans le paramètre, sinon aucune opération n'aura lieu. Le nombre d'éléments dans la liste chaînée après insertion.
Touche LRANGE start stop O(S+N) S dans la complexité temporelle est le décalage représenté par le paramètre de démarrage, N représente le nombre d'éléments. Les paramètres start et end de cette commande sont tous deux basés sur 0. Autrement dit, 0 représente le premier élément en tête (le plus à gauche) de la liste chaînée. La valeur de start peut également être une valeur négative, -1 représentera le dernier élément de la liste chaînée, c'est-à-dire l'élément tail, -2 représentera l'avant-dernier élément et ainsi de suite. Lorsque cette commande obtient des éléments, les éléments aux positions de début et de fin seront également supprimés. Si la valeur de start est supérieure au nombre d'éléments dans la liste chaînée, une liste chaînée vide sera renvoyée. Si la valeur de end est supérieure au nombre d'éléments, cette commande obtient tous les éléments restants de la liste chaînée à partir du début (y compris le début). Renvoie une liste d'éléments dans la plage spécifiée.
Clé LPOP O(1) Retourne et affiche le premier élément de la liste chaînée associée à la clé spécifiée, c'est-à-dire l'élément de tête, . Si la clé n'existe pas, renvoyez nil. L'élément en tête de la liste chaînée.
Clé LLEN O(1) Renvoie le nombre d'éléments dans la liste chaînée associée à la clé spécifiée si la clé ne le fait pas. existe, renvoie 0 . Si le type de valeur associé à la clé n'est pas une liste chaînée, les informations d'erreur pertinentes sont renvoyées. Le nombre d'éléments dans la liste chaînée.
Valeur du nombre de clés LREM O(N) N en complexité temporelle représente le nombre d'éléments dans la liste chaînée. Dans la liste chaînée associée à la clé spécifiée, supprimez le premier nombre d'éléments dont la valeur est égale à value. Si le nombre est supérieur à 0, parcourez du début à la fin et supprimez. Si le nombre est inférieur à 0, parcourez de la fin au début et supprimez. Si count est égal à 0, supprimez tous les éléments de la liste chaînée qui sont égaux à value. Si la clé spécifiée n'existe pas, 0 est renvoyé directement. Renvoie le nombre d'éléments supprimés.
Valeur de l'index de clé LSET O(N) N en complexité temporelle représente le nombre d'éléments dans la liste chaînée. Mais lors de la définition des éléments de tête ou de queue, la complexité temporelle est O(1). Définissez la valeur de la position spécifiée dans la liste chaînée sur la nouvelle valeur, où 0 représente le premier élément, c'est-à-dire l'élément de tête, et -1 représente l'élément de queue. Si la valeur d'index Index dépasse le nombre d'éléments dans la liste chaînée, cette commande renverra des informations d'erreur pertinentes.
Index de clé LINDEX O(N) N en complexité temporelle signifie qu'il doit être parcouru lors de la recherche l'élément le nombre d'éléments. Pour les éléments de tête ou de queue, sa complexité temporelle est O(1). Cette commande renverra l'élément à la position spécifiée (index) dans la liste chaînée. L'index est basé sur 0, ce qui signifie l'élément de tête. Si l'index est -1, cela signifie l'élément de queue. Si la clé n'est pas associée à une liste chaînée, cette commande renverra des informations d'erreur pertinentes. Renvoie l'élément demandé, ou nul si l'index est hors plage.
Touche LTRIM start stop O(N) N représente le nombre d'éléments supprimés. Cette commande ne conservera que les éléments dans la plage spécifiée, gardant ainsi le nombre d'éléments dans le lien relativement constant. Les paramètres de démarrage et d'arrêt sont tous deux basés sur 0, 0 indiquant l'élément d'en-tête. Comme les autres commandes, start et stop peuvent également avoir des valeurs négatives et -1 représente l'élément tail. Si start est supérieur à la fin de la liste chaînée, ou si start est supérieur à stop, cette commande ne signalera pas d'erreur, mais renverra une liste chaînée vide et la clé sera supprimée en même temps. Si stop est supérieur au nombre d'éléments, tous les éléments restants depuis le début sont conservés.
Touche LINSERT AVANT|APRÈS la valeur pivot O(N) N dans la complexité temporelle signifie trouver le nombre d'éléments qui doivent être traversés avant que l'élément pivote. Cela signifie que si le pivot est en tête ou en queue de la liste chaînée, la complexité temporelle de cette commande est O(1). La fonction de cette commande est d'insérer la valeur de l'élément dans le paramètre avant ou après l'élément pivot. Si la clé n'existe pas, cette commande ne fera rien. Si le type de valeur associé à Key n’est pas une liste chaînée, les informations d’erreur associées seront renvoyées. Le nombre d'éléments dans la liste chaînée après une insertion réussie. Si le pivot n'est pas trouvé, -1 est renvoyé. Si la clé n'existe pas, 0 est renvoyé.
Valeur de la clé RPUSH [valeur ...] O(1) Insérer les paramètres à la fin de la valeur de liste associée à la valeur spécifiée Clé de toutes les valeurs données. Si la clé n'existe pas, cette commande créera une liste chaînée vide associée à la clé avant l'insertion, puis insérera les données de la fin de la liste chaînée. Si la valeur de la clé n'est pas de type liste chaînée, cette commande renverra des informations d'erreur pertinentes. Le nombre d'éléments dans la liste chaînée après insertion.
Valeur de la clé RPUSHX O(1) Uniquement lorsque la Clé spécifiée dans le paramètre existe, la commande lui sera associée La valeur donnée dans le paramètre est insérée à la fin de la valeur de la liste, sinon aucune opération n'aura lieu. Le nombre d'éléments dans la liste chaînée après insertion.
Clé RPOP O(1) Retourne et affiche le dernier élément de la liste chaînée associée à la clé spécifiée, c'est-à-dire l'élément de queue. Si la clé n'existe pas, renvoyez nil. L'élément à la fin de la liste chaînée.
RPOPLPUSH source destination O(1) Sélectionnez atomiquement un élément de la fin de la liste chaînée associée à la clé source, puis pop it L'élément est inséré en tête de la liste chaînée associée à la clé de destination. Si la clé source n'existe pas, la commande renverra nil et aucune autre opération ne sera effectuée. Si la source et la destination sont la même clé, cela équivaut à déplacer atomiquement l'élément tail dans sa liste chaînée associée vers la tête de la liste chaînée. Renvoie les éléments sautés et insérés.

3. Exemples de commandes :

1. LPUSH/LPUSHX/LRANGE :

 /> redis-cli    #在Shell提示符下启动redis客户端工具。
    redis 127.0.0.1:6379> del mykey
    (integer) 1
    #mykey键并不存在,该命令会创建该键及与其关联的List,之后在将参数中的values从左到右依次插入。
    redis 127.0.0.1:6379> lpush mykey a b c d
    (integer) 4
    #取从位置0开始到位置2结束的3个元素。
    redis 127.0.0.1:6379> lrange mykey 0 2
    1) "d"
    2) "c"
    3) "b"
    #取链表中的全部元素,其中0表示第一个元素,-1表示最后一个元素。
    redis 127.0.0.1:6379> lrange mykey 0 -1
    1) "d"
    2) "c"
    3) "b"
    4) "a"
    #mykey2键此时并不存在,因此该命令将不会进行任何操作,其返回值为0。
    redis 127.0.0.1:6379> lpushx mykey2 e
    (integer) 0
    #可以看到mykey2没有关联任何List Value。
    redis 127.0.0.1:6379> lrange mykey2 0 -1
    (empty list or set)
    #mykey键此时已经存在,所以该命令插入成功,并返回链表中当前元素的数量。
    redis 127.0.0.1:6379> lpushx mykey e
    (integer) 5
    #获取该键的List Value的头部元素。
    redis 127.0.0.1:6379> lrange mykey 0 0
    1) "e"
Copier après la connexion

2.

    redis 127.0.0.1:6379> lpush mykey a b c d
    (integer) 4
    redis 127.0.0.1:6379> lpop mykey
    "d"
    redis 127.0.0.1:6379> lpop mykey
    "c"
    #在执行lpop命令两次后,链表头部的两个元素已经被弹出,此时链表中元素的数量是2
    redis 127.0.0.1:6379> llen mykey
    (integer) 2
Copier après la connexion

3. LREM/LSET/LINDEX/LTRIM :

    #为后面的示例准备测试数据。
    redis 127.0.0.1:6379> lpush mykey a b c d a c
    (integer) 6
    #从头部(left)向尾部(right)变量链表,删除2个值等于a的元素,返回值为实际删除的数量。
    redis 127.0.0.1:6379> lrem mykey 2 a
    (integer) 2
    #看出删除后链表中的全部元素。
    redis 127.0.0.1:6379> lrange mykey 0 -1
    1) "c"
    2) "d"
    3) "c"
    4) "b"
    #获取索引值为1(头部的第二个元素)的元素值。
    redis 127.0.0.1:6379> lindex mykey 1
    "d"
    #将索引值为1(头部的第二个元素)的元素值设置为新值e。
    redis 127.0.0.1:6379> lset mykey 1 e
    OK
    #查看是否设置成功。
    redis 127.0.0.1:6379> lindex mykey 1
    "e"
    #索引值6超过了链表中元素的数量,该命令返回nil。
    redis 127.0.0.1:6379> lindex mykey 6
    (nil)
    #设置的索引值6超过了链表中元素的数量,设置失败,该命令返回错误信息。
    redis 127.0.0.1:6379> lset mykey 6 hh
    (error) ERR index out of range
    #仅保留索引值0到2之间的3个元素,注意第0个和第2个元素均被保留。
    redis 127.0.0.1:6379> ltrim mykey 0 2
    OK
    #查看trim后的结果。
    redis 127.0.0.1:6379> lrange mykey 0 -1
    1) "c"
    2) "e"
    3) "c"
Copier après la connexion

4. LINSERT :

    #删除该键便于后面的测试。
    redis 127.0.0.1:6379> del mykey
    (integer) 1
    #为后面的示例准备测试数据。
    redis 127.0.0.1:6379> lpush mykey a b c d e
    (integer) 5
    #在a的前面插入新元素a1。
    redis 127.0.0.1:6379> linsert mykey before a a1
    (integer) 6
    #查看是否插入成功,从结果看已经插入。注意lindex的index值是0-based。
    redis 127.0.0.1:6379> lindex mykey 0
    "e"
    #在e的后面插入新元素e2,从返回结果看已经插入成功。
    redis 127.0.0.1:6379> linsert mykey after e e2
    (integer) 7
    #再次查看是否插入成功。
    redis 127.0.0.1:6379> lindex mykey 1
    "e2"
    #在不存在的元素之前或之后插入新元素,该命令操作失败,并返回-1。
    redis 127.0.0.1:6379> linsert mykey after k a
    (integer) -1
    #为不存在的Key插入新元素,该命令操作失败,返回0。
    redis 127.0.0.1:6379> linsert mykey1 after a a2
    (integer) 0
    5. RPUSH/RPUSHX/RPOP/RPOPLPUSH:
    #删除该键,以便于后面的测试。
    redis 127.0.0.1:6379> del mykey
    (integer) 1
    #从链表的尾部插入参数中给出的values,插入顺序是从左到右依次插入。
    redis 127.0.0.1:6379> rpush mykey a b c d
    (integer) 4
    #通过lrange的可以获悉rpush在插入多值时的插入顺序。
    redis 127.0.0.1:6379> lrange mykey 0 -1
    1) "a"
    2) "b"
    3) "c"
    4) "d"
    #该键已经存在并且包含4个元素,rpushx命令将执行成功,并将元素e插入到链表的尾部。
    redis 127.0.0.1:6379> rpushx mykey e
    (integer) 5
    #通过lindex命令可以看出之前的rpushx命令确实执行成功,因为索引值为4的元素已经是新元素了。
    redis 127.0.0.1:6379> lindex mykey 4
    "e"
    #由于mykey2键并不存在,因此该命令不会插入数据,其返回值为0。
    redis 127.0.0.1:6379> rpushx mykey2 e
    (integer) 0
    #在执行rpoplpush命令前,先看一下mykey中链表的元素有哪些,注意他们的位置关系。
    redis 127.0.0.1:6379> lrange mykey 0 -1
    1) "a"
    2) "b"
    3) "c"
    4) "d"
    5) "e"
    #将mykey的尾部元素e弹出,同时再插入到mykey2的头部(原子性的完成这两步操作)。
    redis 127.0.0.1:6379> rpoplpush mykey mykey2
    "e"
    #通过lrange命令查看mykey在弹出尾部元素后的结果。
    redis 127.0.0.1:6379> lrange mykey 0 -1
    1) "a"
    2) "b"
    3) "c"
    4) "d"
    #通过lrange命令查看mykey2在插入元素后的结果。
    redis 127.0.0.1:6379> lrange mykey2 0 -1
    1) "e"
    #将source和destination设为同一键,将mykey中的尾部元素移到其头部。
    redis 127.0.0.1:6379> rpoplpush mykey mykey
    "d"
    #查看移动结果。
    redis 127.0.0.1:6379> lrange mykey 0 -1
    1) "d"
    2) "a"
    3) "b"
    4) "c"
Copier après la connexion

4. 🎜>

Pour la valeur de la structure de liste chaînée, Redis fournit quelques conseils pratiques dans sa documentation officielle, comme la commande RPOPLPUSH. Une explication spécifique est donnée ci-dessous.

Les listes chaînées Redis sont souvent utilisées dans les services de file d'attente de messages pour compléter les échanges de messages entre plusieurs programmes.

Supposons qu'une application effectue une opération LPUSH pour ajouter de nouveaux éléments à la liste chaînée. Nous appelons généralement un tel programme un "Producteur", tandis qu'une autre application effectue une opération RPOP pour ajouter de nouveaux éléments à la liste chaînée. . Pour supprimer des éléments d'un programme, nous appelons un tel programme un "Consommateur".

Si à ce moment, le programme consommateur plante immédiatement après avoir retiré l'élément de message, parce que le message a été supprimé et n'a pas été traité normalement, alors on peut penser que le message a été perdu, ce qui peut provoquer des données commerciales. Un statut commercial perdu ou incohérent se produit.

Cependant, en utilisant la commande RPOPLPUSH, le programme consommateur supprime le message de la file d'attente de messages principale, puis l'insère dans la file d'attente de sauvegarde. Il attend que le programme consommateur termine la logique de traitement normale avant de supprimer le message de. la file d'attente de sauvegarde.

Dans le même temps, nous pouvons également fournir un processus démon lorsqu'un message dans la file d'attente de sauvegarde s'avère avoir expiré, il peut être remis dans la file d'attente des messages principale afin que d'autres programmes consommateurs puissent continuer le traitement. .

Pour plus de connaissances sur Redis, veuillez faire attention à la colonne

Tutoriel d'introduction à Redis

.

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 de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment construire le mode Cluster Redis Comment construire le mode Cluster Redis Apr 10, 2025 pm 10:15 PM

Le mode Redis Cluster déploie les instances Redis sur plusieurs serveurs grâce à la rupture, à l'amélioration de l'évolutivité et de la disponibilité. Les étapes de construction sont les suivantes: Créez des instances de redis étranges avec différents ports; Créer 3 instances Sentinel, Moniteur Redis Instances et basculement; Configurer les fichiers de configuration Sentinel, ajouter des informations d'instance Redis de surveillance et des paramètres de basculement; Configurer les fichiers de configuration d'instance Redis, activer le mode de cluster et spécifier le chemin du fichier d'informations de cluster; Créer un fichier nœuds.conf, contenant des informations de chaque instance redis; Démarrez le cluster, exécutez la commande CREATE pour créer un cluster et spécifiez le nombre de répliques; Connectez-vous au cluster pour exécuter la commande d'informations de cluster pour vérifier l'état du cluster; faire

Comment effacer les données redis Comment effacer les données redis Apr 10, 2025 pm 10:06 PM

Comment effacer les données Redis: utilisez la commande flushall pour effacer toutes les valeurs de clé. Utilisez la commande flushdb pour effacer la valeur clé de la base de données actuellement sélectionnée. Utilisez SELECT pour commuter les bases de données, puis utilisez FlushDB pour effacer plusieurs bases de données. Utilisez la commande del pour supprimer une clé spécifique. Utilisez l'outil Redis-CLI pour effacer les données.

Comment lire la file d'attente redis Comment lire la file d'attente redis Apr 10, 2025 pm 10:12 PM

Pour lire une file d'attente à partir de Redis, vous devez obtenir le nom de la file d'attente, lire les éléments à l'aide de la commande LPOP et traiter la file d'attente vide. Les étapes spécifiques sont les suivantes: Obtenez le nom de la file d'attente: Nommez-le avec le préfixe de "Fitre:" tel que "Fitre: My-Quyue". Utilisez la commande LPOP: éjectez l'élément de la tête de la file d'attente et renvoyez sa valeur, telle que la file d'attente LPOP: My-Queue. Traitement des files d'attente vides: si la file d'attente est vide, LPOP renvoie NIL et vous pouvez vérifier si la file d'attente existe avant de lire l'élément.

Comment utiliser la commande redis Comment utiliser la commande redis Apr 10, 2025 pm 08:45 PM

L'utilisation de la directive Redis nécessite les étapes suivantes: Ouvrez le client Redis. Entrez la commande (Verbe Key Value). Fournit les paramètres requis (varie de l'instruction à l'instruction). Appuyez sur Entrée pour exécuter la commande. Redis renvoie une réponse indiquant le résultat de l'opération (généralement OK ou -err).

Comment utiliser Redis Lock Comment utiliser Redis Lock Apr 10, 2025 pm 08:39 PM

L'utilisation des opérations Redis pour verrouiller nécessite l'obtention du verrouillage via la commande setnx, puis en utilisant la commande Expire pour définir le temps d'expiration. Les étapes spécifiques sont les suivantes: (1) Utilisez la commande setnx pour essayer de définir une paire de valeurs de clé; (2) Utilisez la commande Expire pour définir le temps d'expiration du verrou; (3) Utilisez la commande del pour supprimer le verrouillage lorsque le verrouillage n'est plus nécessaire.

Comment lire le code source de Redis Comment lire le code source de Redis Apr 10, 2025 pm 08:27 PM

La meilleure façon de comprendre le code source redis est d'aller étape par étape: familiarisez-vous avec les bases de Redis. Sélectionnez un module ou une fonction spécifique comme point de départ. Commencez par le point d'entrée du module ou de la fonction et affichez le code ligne par ligne. Affichez le code via la chaîne d'appel de fonction. Familiez les structures de données sous-jacentes utilisées par Redis. Identifiez l'algorithme utilisé par Redis.

Comment utiliser la ligne de commande redis Comment utiliser la ligne de commande redis Apr 10, 2025 pm 10:18 PM

Utilisez l'outil de ligne de commande redis (Redis-CLI) pour gérer et utiliser Redis via les étapes suivantes: Connectez-vous au serveur, spécifiez l'adresse et le port. Envoyez des commandes au serveur à l'aide du nom et des paramètres de commande. Utilisez la commande d'aide pour afficher les informations d'aide pour une commande spécifique. Utilisez la commande QUIT pour quitter l'outil de ligne de commande.

Comment configurer le temps d'exécution du script LUA dans Centos Redis Comment configurer le temps d'exécution du script LUA dans Centos Redis Apr 14, 2025 pm 02:12 PM

Sur CentOS Systems, vous pouvez limiter le temps d'exécution des scripts LUA en modifiant les fichiers de configuration Redis ou en utilisant des commandes Redis pour empêcher les scripts malveillants de consommer trop de ressources. Méthode 1: Modifiez le fichier de configuration Redis et localisez le fichier de configuration Redis: le fichier de configuration redis est généralement situé dans /etc/redis/redis.conf. Edit Fichier de configuration: Ouvrez le fichier de configuration à l'aide d'un éditeur de texte (tel que VI ou NANO): Sudovi / etc / redis / redis.conf Définissez le délai d'exécution du script LUA: Ajouter ou modifier les lignes suivantes dans le fichier de configuration pour définir le temps d'exécution maximal du script LUA (unité: millisecondes)

See all articles