89 votes

Supprimer toutes les entrées dans une liste Redis

Supposons que vous ayez un datatype LIST dans Redis. Comment supprimer toutes ses entrées? J'ai déjà essayé ceci:

LTRIM key 0 0
LTRIM key -1 0

Les deux laissent le premier élément. Cela laissera tous les éléments:

LTRIM key 0 -1

Je ne vois pas de commande séparée pour vider complètement une liste.

2 votes

@DavidJames: Considérez-le comme une autre façon d'écrire "foo." Je suis en train de suivre la convention utilisée dans la propre documentation de Redis : redis.io/commandes

0 votes

Oui, dans redis, toutes les structures de données sont des clés. Cela ne signifie pas que 'key' est utile dans un exemple. Tout le contraire, je pense. Utiliser mylist rendrait votre question plus claire. Par exemple, redis.io/commands/ltrim écrit : LTRIM mylist 1 -1. La page que vous citez est une référence de commande et ne doit pas être considérée comme une "convention" pour créer de bons exemples.

0voto

Matt Points 3445

Il semble qu'il n'y ait pas d'opération atomique pour faire cela. Ce que j'ai découvert (l'exemple est en C# en utilisant StackExchange.Redis) est le suivant :

cacheDb.ListTrim(key, 0, 0); // supprimer tous les éléments sauf le premier
cacheDb.ListLeftPop(key);    // puis supprimer le premier

supprimera tous les éléments en deux étapes (où cacheDb est votre base de données de type IDatabase à laquelle vous êtes connecté, et key est de type RedisKey).

Je pense que dans la syntaxe cli, cela sera :

LTRIM key 0 0
LPOP key

Cependant, il semble que cela fasse la même chose que cacheDb.KeyDelete(key); (ou dans la syntaxe cli DEL key) - car dans les deux cas, la clé n'est plus trouvée.

-1voto

deimosaffair Points 21

La réponse acceptée est fausse. supposons que j'ai

redis 127.0.0.1:6379> KEYS * 
1) "newKey" 
2) "firstHash" 
3) "secondList" 
4) "test4" 
5) "firstList" 
6) "mylist" 

pour utiliser l'exemple d'ahmed, qui est en fait correct. maintenant, si je fais :

DEL 'test4'

je me retrouve avec :

1) "newKey" 
2) "firstHash" 
3) "secondList" 
4) "firstList" 
5) "mylist"` 

donc, je n'ai pas supprimé toutes les entrées de la liste 'test4', j'ai supprimé test4 lui-même. ce n'est pas la même chose. pas du tout. j'ai une petite application où les clés de liste sont des hashs calculés à partir de plusieurs données (enfin, ne le sont-elles pas toutes ?), ces listes sont parfois effacées, mais la sémantique d'une liste vide et d'une liste inexistante est très différente. donc, non, je ne veux pas SUPPRIMER 'mes hashs', je veux juste supprimer toutes les entrées.

attention, ô toi qui t'aventures ici.

0 votes

Si vous regardez la page citée ci-dessous, vous verrez que en fait les sémantiques SONT les mêmes! Pris de : La commande LPUSH insère un nouvel élément sur la tête, tandis que RPUSH insère un nouvel élément sur la queue. Une nouvelle liste est créée lorsqu'une de ces opérations est effectuée contre une clé vide. De même, la clé est supprimée de l'espace clé si une opération de liste vide la liste. Ces sémantiques sont très utiles car toutes les commandes de liste se comporteront exactement comme si elles étaient appelées avec une liste vide si elles sont appelées avec une clé inexistante comme argument.

0 votes

De la bouche du cheval : "De même, la clé est retirée de l'espace des clés si une opération de liste vide la liste." donc, est { [], [], [] } === { [] } ? pas pour moi. je suppose que nous sommes dans des espaces topologiques différents.... :)

0 votes

Eh bien, la question initiale était comment supprimer une liste entière dans redis. donc si vous supprimez soit la clé, soit toutes les entrées et que la clé est automatiquement supprimée par redis, le résultat est le même. Je ne suis donc pas sûr de ce que vous voulez dire avec { [], [], [] } === { [] }.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X