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
LREM
et en le remplaçant s'il a été trouvé. - maintenir un
SET
séparé en conjonction avec votreLIST
- en boucle à travers le
LIST
jusqu'à 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:
ZSCORE
ZRANK
ZREVRANK
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?