Maison > Article > base de données > Analyse des commandes liées au type de données list de Redis et comment les utiliser
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.
lpush key value
lpush 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êtelrange key start end
Comme indiqué ci-dessus
lindex key index
Obtenir l'élément à l'indice d'index spécifié de la listerrreee
llen key
Obtenir la longueur de la liste ; si la liste n'existe pas, renvoyez la commande 0
rrreee
lpop key
rrreeerpop key
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!