Wir verwenden Redis als Caching-Server und müssen oft mit der Caching-Liste umgehen. Wenn wir einfache Objekte zwischenspeichern, machen wir einen GET und Redis gibt null zurück, wenn das Objekt nicht existiert und wir wissen, dass das Objekt nicht zwischengespeichert ist und aus der Datenbank geladen werden muss.
Aber wie gehen wir am besten mit Listen um - eine leere Liste kann ein gültiger Wert sein. Müssen wir EXISTS aufrufen, um zu überprüfen, ob die Liste existiert (aber die Operation 2 statt einer aufrufen) oder hat jemand eine bessere Idee, wie man mit diesem Szenario umgeht?
/ Danke
Wenn Sie das unbedingt tun müssen, können Sie beim Erstellen der Liste ein "sentinel" als erstes Element auswählen, das nie entfernt wird. Um dies atomar zu tun, können Sie MULTI / EXEC / WATCH verwenden, aber Watch ist nur in Redis 2.2 verfügbar, das momentan eine Vorschau ist (auch wenn es ziemlich stabil ist, können Sie es aus dem Github-Masterzweig holen).
Ich denke, in Ihrem Anwendungsfall können Sie auch RPUSHX und LPUSHX verwenden, die nur dann gegen eine Liste drücken, wenn sie bereits existiert.
Beachten Sie, dass Redis 2.2 zu existieren bedeutet, mindestens ein Element für eine Liste zu haben, da Listen, die Null Elemente erreichen, automatisch aus vielen guten Gründen entfernt werden;)
Leider zeigen List / Set-Abrufbefehle wie LRANGE und SMEMBERS anscheinend nicht zwischen einer leeren Liste / Menge und einer nicht existierenden Liste / Menge.
Wenn du also unbedingt zwischen den beiden Fällen unterscheiden musst, musst du zuerst ein EXISTS machen. Versuchen Sie, Ihre Befehle für eine bessere Leistung zu pipelinern. Die meisten Redis-Client-Bibliotheken unterstützen Pipelining.
Oder Sie überdenken Ihre Caching-Strategie, so dass Sie sie nicht unterscheiden müssen.
Tags und Links redis