Eindeutiger Wert in der redis-Liste/set
Möchte ich eine Liste der vorhandenen Produkte in redis
aber ich möchte, um zu überprüfen, ob das Produkt-name existiert bereits erste (doppelte Kontrolle).
Meine Liste akzeptiert derzeit Duplikate, also: Kann mir jemand helfen zu zeigen, wie man hinzufügen eindeutigen Wert in der Liste?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Anstelle der Verwendung einer Liste, verwenden Sie einen Satz. Legt sind Behälter für einzigartige Objekte. Jedes Objekt kann nur einmal in einem set. Werfen Sie einen Blick auf die set-Befehle hier: http://redis.io/commands/#set.
Und ein Beispiel zur Verwendung von redis-cli (wir versuchen add "Produkt" zweimal, aber es erscheint nur einmal in der Liste der Produkte):
Dies ist meiner (leichtsinnigen) Lösung zu halten, Redis Liste einzigartig.
(Implementierung in Ruby)
Jedes mal, wenn Sie wollen push oder einfügen Element, um Ihre Liste, überprüfen Sie, ob
LINSERT
Befehl wird in der Lage sein, dieses Element ist nur nach dem selben Element (dies ist der einzige Weg den ich kenne um zu überprüfen, ob das Element bereits in der redis-Liste oder nicht).Wenn
LINSERT
zurückkehren wird, den status -1 bedeutet, dass es nicht in der Lage war zu finden, Punkt in deiner Liste - ist alles ok (Sie können schieben Sie es oder fügen Sie es jetzt).Wenn
LINSERT
zurück anderen Wert (die Größe der Liste im anderen Fall ist) - es bedeutet, dass es in der Lage war zu finden, der Artikel bereits und es war in der Lage, fügen Sie ein weiteres Element, nur nach der vorherigen. Es bedeutet, dass Sie (mindestens eine) Vervielfältigung des Artikels. Sie können löschen einer von Ihnen jetzt.Warum nicht einfach anrufen
Redis.lrem
vor? Also, wenn es findet alle vorkommen des Elements entfernt, sonst nichts. So etwas wie dieses:In Fall, dass Sie verwalten müssen, um die Reihenfolge und der Einzigartigkeit Sie können eine sortierte Menge
Schlage ich vor, eine option, die schafft eine einzigartige Liste, die Elemente, die nicht verlieren Ihre position. Diese option funktioniert viel schneller als lpush, lrem, rpop. Zur gleichen Zeit, es unterstützt die funktionale von sadd, spop.
PHP-code Beispiel: