Vérifier si une valeur existe déjà dans une liste Redis
Je me demande s'il existe un moyen de vérifier si une clé existe déjà dans une liste redis?
Je ne peux pas utiliser un ensemble parce que je ne veux pas imposer l'unicité, mais je veux être en mesure de vérifier si la chaîne est réellement là.
Merci.
3 réponses
Vos options sont les suivantes:
- en utilisant
LREMet en le remplaçant s'il a été trouvé. - maintenir un
SETséparé en conjonction avec votreLIST - en boucle à travers le
LISTjusqu'à ce que vous trouviez l'élément ou atteigniez la fin.
Les listes Redis sont implémentées en tant que http://en.wikipedia.org/wiki/Linked_list , d'où les limites.
Je pense que votre meilleure option est de maintenir un doublon SET. C'est ce que j'ai tendance à faire. Il suffit de penser comme un indice supplémentaire. Quoi qu'il en soit, assurez-vous que vos actions sont atomiques avec MULTI-EXEC ou des scripts Lua.
Les listes
Autorisent les doublons mais ne fournissent pas un moyen simple de vérifier l'existence et comme @ Fritzy l'a conseillé, vous devez soit:
- effectuer plusieurs opérations (supprimer puis Ajouter à nouveau est trouvé) pour des vérifications simples = coût dans le temps
- maintenir un ensemble séparé = coût en mémoire
Je suis surpris que personne ne vous ait conseillé d'utiliser une table de hachage ou triés Set qui combinent les avantages de permettant duplicité (en stockant le nombre d'éléments en tant que valeur - table de hachage, ou score - ensemble trié) et membres d'indexation par nature d'une table de hachage/ensemble.
Table De Hachage
Pour vérifier l'existence d'une clé, utilisez la commande HGET. Il renvoie une réponse nil si le membre spécifié n'existe pas.
Pour ajouter un nouveau membre, utilisez simplement HINCRBY qui mettra à jour la valeur (c'est-à-dire le nombre d'éléments avec le nom du membre) ou créera un nouveau membre si elle n'existe pas.
Ensemble Trié
Pour vérifier l'existence d'une clé, utilisez l'une des trois commandes suivantes:
ZSCOREZRANKZREVRANK
Ils renvoient une réponse nil si le membre spécifié n'existe pas.
Pour ajouter un nouveau membre, utilisez simplement ZINCRBY qui mettra à jour le score (c'est-à-dire le nombre d'éléments avec le nom du membre) ou créera un nouveau membre s'il n'existe pas.
Pour résumer jusqu': Ensembles classés ou Tables de Hachage vous permettre de faire toutes les opérations avec vos exigences , avec une seule commande.
Non, il n'y a aucun moyen de vérifier si une liste redis contient une valeur donnée. Voir commandes de liste Redis pour référence.
Je suppose que vous pouvez utiliser LREM pour (essayer de) supprimer la valeur, et vérifier la valeur de retour pour voir si elle a été supprimée. Mais alors vous devriez le remettre en place, et cela semble douteux. Il y a probablement une meilleure solution à votre problème - qu'essayez-vous de réaliser?