Maison  >  Article  >  base de données  >  Analyse des commandes liées au type de données list de Redis et comment les utiliser

Analyse des commandes liées au type de données list de Redis et comment les utiliser

WBOY
WBOYavant
2023-05-28 09:32:18995parcourir

    Introduction à la liste

    • list est un tableau de chaînes trié par ordre d'insertion (en termes simples, il stocke toujours les chaînes). Vous pouvez ajouter un élément en tête (à gauche) ou en queue (à droite) d'une liste, et une liste peut contenir jusqu'à ^32-1 éléments (plus de 4 milliards d'éléments par liste).

    • La liste dans Redis est très similaire à la LinkedList en Java. La couche inférieure est une structure de liste chaînée. Les opérations d'insertion et de suppression de la liste sont très rapides, avec une complexité temporelle de 0(1), contrairement à la liste chaînée. Opérations d'insertion et de suppression de la structure du tableau nécessaires. Bien qu'il s'agisse encore apparemment d'une liste, l'implémentation sous-jacente des listes dans Redis ne se limite pas à de simples listes doublement liées.

    • Lorsque la quantité de données est faible, sa structure de stockage sous-jacente est une mémoire continue, appelée ziplist (liste compressée). Elle stocke tous les éléments étroitement ensemble et alloue une mémoire continue lorsque la quantité de données est importante. deviendra une structure de liste rapide (liste chaînée rapide).

    • Mais une simple liste chaînée est également imparfaite. Les pointeurs précédent et suivant de la liste chaînée occuperont plus de mémoire, gaspilleront de l'espace et augmenteront la fragmentation de la mémoire. Depuis Redis 3.2, Redis utilise la liste rapide de structure de données hybride (liste chaînée rapide), qui se compose d'une liste zip et d'une liste chaînée.

    Commandes communes

    Ajouter une commande

    lpush key valuelpush key value

    从左边插入元素(将一个或多个值插入到列表头部)

    127.0.0.1:6379> lpush ids 1
    (integer) 1
    127.0.0.1:6379> lrange ids 0 -1
    1) "1"
    127.0.0.1:6379> lpush ids 2
    (integer) 2
    127.0.0.1:6379> lrange ids 0 -1
    1) "2"
    2) "1"

    rpush key value

    从右边插入元素(将一个或多个值插入到列表的尾部(最右边))

    127.0.0.1:6379> rpush ids 3
    (integer) 3
    127.0.0.1:6379> lrange ids 0 -1
    1) "2"
    2) "1"
    3) "3"

    linsert key BEFORE|AFTER pivot value
    向某个元素前/后插入元素,返回结果为当前列表长度,注意列表不存在或者指定元素不存在列表中时,都将不执行任何操作。

    //元素3前插入0
    127.0.0.1:6379> linsert ids before 3 0
    (integer) 4
    127.0.0.1:6379> lrange ids 0 -1
    1) "2"
    2) "1"
    3) "0"
    4) "3"
    //元素3后插入0
    127.0.0.1:6379> linsert ids after 3 4
    (integer) 5
    127.0.0.1:6379> lrange ids 0 -1
    1) "2"
    2) "1"
    3) "0"
    4) "3"
    5) "4"

    查询命令

    lrange key start end
    获取列表中指定范围内的元素列表;若start值大于列表end值则返回空列表
    如上已经展示过了

    lindex key index
    获取列表指定索引下标的元素

    127.0.0.1:6379> lindex ids 0
    "2"
    127.0.0.1:6379> lindex ids -1
    "4"

    llen key
    获取列表长度;列表不存在则返回0

    127.0.0.1:6379> llen ids
    (integer) 5

    弹出/删除命令

    lpop key
    从列表左侧弹出元素并返回头部元素

    127.0.0.1:6379> lpop ids
    "2"
    127.0.0.1:6379> lrange ids 0 -1
    1) "1"
    2) "0"
    3) "3"
    4) "4"

    rpop key
    从列表右侧弹出元素并返回尾部元素

    127.0.0.1:6379> rpop ids
    "4"
    127.0.0.1:6379> lrange ids 0 -1
    1) "1"
    2) "0"
    3) "3"

    lrem key count value
    从列表中找到等于value的元素进行删除,根据count的不同分为三种情况:
    count > 0,从表头开始向表尾,移除数量为count个元素;
    count count = 0,移除表中所有与 value 相等的值

    127.0.0.1:6379> lrem ids 0 3
    (integer) 1
    127.0.0.1:6379> lrange ids 0 -1
    1) "1"
    2) "0"

    ltrim key start end
    对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除

    127.0.0.1:6379> ltrim ids 0 0
    OK
    127.0.0.1:6379> lrange ids 0 -1
    1) "1"

    修改命令

    lset key index value
    Insérer des éléments depuis la gauche (insérer une ou plusieurs valeurs en tête de liste)

    127.0.0.1:6379> lset ids 0 0
    OK
    127.0.0.1:6379> lrange ids 0 -1
    1) "0"

    rpush key value

    Insérer des éléments à partir de la droite (insérer une ou plusieurs valeurs à la queue (à l'extrême droite) de la liste)
    rrreee

    insert key AVANT|APRÈS la valeur pivot

    transmettre à un élément / Après avoir inséré un élément, le résultat renvoyé est la longueur actuelle de la liste. Notez que si la liste n'existe pas ou si l'élément spécifié n'existe pas dans la liste, aucune opération ne sera effectuée.
    rrreee
    Commande de requête

    lrange key start end

    Obtenir la liste des éléments dans la plage spécifiée dans la liste ; si la valeur de début est supérieure à la valeur de fin de la liste, une liste vide sera être renvoyé

    Comme indiqué ci-dessusAnalyse des commandes liées au type de données list de Redis et comment les utiliser

    lindex key index

    Obtenir l'élément à l'indice d'index spécifié de la listeAnalyse des commandes liées au type de données list de Redis et comment les utiliserrrreee

    llen key

    Obtenir la longueur de la liste ; si la liste n'existe pas, renvoyez la commande 0
    rrreee

    Pop/delete

    Analyse des commandes liées au type de données list de Redis et comment les utiliserlpop key

    Popez un élément du côté gauche de la liste et renvoyez l'élément de tête

    rrreeeAnalyse des commandes liées au type de données list de Redis et comment les utiliserrpop key

    Déplacez un élément du côté droit de la liste et renvoyez l'élément de queue

    rrreee

    lrem key count value

    Trouvez l'élément égal à la valeur dans la liste et supprimez-le. est divisé en trois situations selon le nombre :

    count > 0, en commençant par la tête du tableau jusqu'à la fin du tableau, supprimez les éléments du nombre ;

    count count = 0, supprimez toutes les valeurs égales à la valeur dans le tableau 🎜rrreee🎜ltrim key start end 🎜Coupez une liste, c'est-à-dire laissez la liste uniquement conserve les éléments dans la plage spécifiée, et les éléments qui ne sont pas dans la plage spécifiée seront supprimés🎜rrreee🎜Modifier la commande🎜🎜lset key index value🎜Modifiez la valeur de l'élément avec l'indice spécifié et définissez-le sur value🎜rrreee🎜Bloquer la commande contextuelle🎜🎜blpop key [key …] timeout🎜Supprimer et récupérer le premier élément de la liste Si la liste ne contient aucun élément, elle bloquera La liste attend que le délai d'attente soit écoulé (dans. secondes) ou un élément popable est trouvé🎜🎜brpop key [key …] timeout🎜Supprimez et récupérez le dernier élément de la liste Si la liste ne contient aucun élément, elle bloquera la liste jusqu'à ce que le délai d'attente expire ou qu'un élément popable soit trouvé. est trouvé. 🎜Démonstration : 🎜Ouvrez trois fenêtres de connexion Reids, la première exécute blpop, la seconde exécute brpop et la troisième exécute add : 🎜Vous pouvez voir que les fenêtres 1 et 2 ont été bloquées ici après l'exécution. Il n'y a aucun élément 🎜🎜🎜🎜🎜🎜🎜🎜La fenêtre 3 exécute l'ajout : lpush ids 1 2 3 4 5 6🎜Vous pouvez voir que les éléments correspondants apparaissent immédiatement dans les fenêtres 1 et 2 : 🎜🎜🎜🎜🎜🎜🎜 🎜Scénario d'application 🎜🎜File d'attente des messages : lpop et rpush (ou à l'inverse, lpush et rpop) peuvent implémenter la fonction de file d'attente 🎜🎜 comme la liste, la liste de commentaires et le classement dans le cercle d'amis : la commande lpush et la commande lrange peuvent implémenter la dernière fonction de liste, à chaque fois via la commande lpush Insérez de nouveaux éléments dans la liste, puis lisez la dernière liste d'éléments via la commande lrange. 🎜

    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