Quelle est la meilleure pratique pour la liste et la gestion des ensembles en Redis?

StackOverflow https://stackoverflow.com/questions/4040574

  •  27-09-2019
  •  | 
  •  

Question

Nous utilisons Redis comme serveur de mise en cache, et souvent à traiter avec la liste mise en cache. Lorsque nous mettons en cache des objets simples que nous faisons un GET et Redis renvoie null si l'objet n'existe pas et nous savons que l'objet est mis en mémoire cache et doivent être chargées de la base de données.

Mais comment peut-on mieux traiter le même pour les listes - une liste vide peut être une valeur valide. Avons-nous besoin d'appeler EXISTE pour vérifier si la liste existe (mais qui rend l'opération 2 appels au lieu d'un) ou que quelqu'un a une meilleure idée de comment gérer ce scénario?

/ Merci

Était-ce utile?

La solution

Si vous absolument besoin de le faire, lorsque la liste est créée, vous pouvez pousser un « sentinelle » comme premier élément qui est jamais supprimé. Pour ce faire atomiquement vous pouvez utiliser MULTI / EXEC / watch, mais montre est seulement disponible en Redis 2.2 qui est actuellement un aperçu (même si assez stable, vous pouvez le saisir de la branche principale de github).

Je pense que dans votre cas d'utilisation, vous pouvez également RPUSHX et LPUSHX, qui atomiquement pousser contre une liste que si elle existe déjà.

Notez que depuis Redis 2.2 exister des moyens d'avoir au moins 1 élément pour une liste, sous forme de listes qui atteindront zéro éléments sont automatiquement supprimés, pour de bonnes raisons;)

Autres conseils

Malheureusement, la liste des commandes / récupération telles que définies lrange et SMEMBERS ne semblent pas faire la distinction entre une liste vide / set et une liste inexistante / set.

Donc, si vous absolument besoin de faire la distinction entre les deux cas, je suppose que vous aurez besoin de faire un premier EXISTE. Essayez pipelining vos commandes pour de meilleures performances. La plupart des bibliothèques clientes Redis prennent en charge pipelining.

Ou vous pouvez revoir votre stratégie de mise en cache de sorte que vous n'avez pas besoin de les distinguer.

Si vous utilisez php, j'affecter la valeur de retour à une variable et vérifier si elle est un tableau. (Voilà comment cela fonctionne en utilisant la bibliothèque Predis)

$res = $redis->get('Key');
if(is_array($res))
    do code here
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top