Redis
 sql >> Datenbank >  >> NoSQL >> Redis

So speichern Sie das Suchergebnis des aggregierten Katalogbaums in Redis

Wenn Sie Geschwindigkeit wollen, sollten Sie so viel wie möglich vorbereiten, wenn Sie die Struktur oder den 'Cache' in Redis speichern. Wenn Sie die Produkte in einem HSET speichern , und fügen Sie die Kategoriezähler (einen pro Kategorie) neben Ihrem Element "Produktdaten" in diesem HSET hinzu , können Sie HINCRBY verwenden um die Zähler zu inkrementieren/dekrementieren.

Im Allgemeinen (Entwerfen eines Redis-Cache für Ihre Bedürfnisse):Sie sollten versuchen, das Abrufen von Daten zu verhindern, die Sie nicht benötigen.

Ich empfehle die Verwendung eines Lua-Skripts zum Speichern (/Aktualisieren/Löschen) sowie zum Abrufen Ihres aggregierten Berichts. Lua-Skripte werden auf dem Redis-Server ausgeführt. ServiceStack unterstützt sie (SCRIPT LOAD + EVALSHA oder einfach EVAL ), und Sie könnten auch das BookSleeve C#-Clientmodul ausprobieren (das wir verwenden und etwas schneller sind. 'schneller' :Gutes Redis-Daten-Design steht natürlich an erster Stelle). Pipelining sollte auch mit ServiceStack möglich sein.

Wenn die Kategorien und Produkte eine ganzzahlige ID haben, können Sie diese auch mit einem ZSET kombinieren , wo Sie die ID als Ergebnisfeld verwenden können. Mit einem ZRANGEBYSCORE Sie können den „Rekord“ direkt erhalten. Diese Technik ist sicher, solange Ihre IDs 15 Ziffern oder weniger verwenden und nicht den Dezimalteil des „Ergebnisses“ verwenden. Die ID muss also im Bereich von -999999999999999 bis 999999999999999 bleiben. Hinweis:Diese Limits existieren, weil der Redis-Server die Punktzahl (Float) tatsächlich intern als Redis-String-Darstellung speichert.

Hoffe das hilft, TW