2017-04-01 2 views
0

Unsere DB ist meist liest, aber wir möchten eine "Anzahl der Ansichten" und "Daumen hoch/Daumen runter" zu unseren Videos hinzufügen.Wie man "View count" in redis behandelt

Wenn wir inkrementierende Ansichten in MySQL getestet haben, begann unsere Datenbank mit der Deadlock-Funktion.

Ich habe über die Behandlung dieses Problems nachgedacht, indem ich einen Redis DB hatte, der die Anzahl der Aufrufe enthält, und erst nach Ablauf des Schlüssels in die Datenbank schreibt. Aber ich höre, dass die Benachrichtigungen nicht konsistent sind, und ich möchte die Ansichtsdaten nicht verlieren.

Gibt es einen besseren Weg? Oder ist die Rede von inkonsistenten Redis-Benachrichtigungen nicht wahr?

Danke,

Sammy

Antwort

0

Redis' Schlüsselraum-Benachrichtigungen sind konsistent, aber die Lieferung nicht garantiert sind.

Wenn Sie keine Daten verlieren möchten, implementieren Sie Ihren eigenen Hintergrundprozess, der die Zähler manuell ausläuft - d. H. Kopien in MySQL und aus Redis gelöscht.

Es gibt mehrere Ansätze zur Implementierung dieses Lazy-Eviction-Musters. Beispielsweise können Sie einen Redis Hash mit zwei Feldern verwenden: ein Wertfeld, das Sie HINCRBY und ein Timestamp-Feld für Ablauflogikzwecke können. Ihr Hintergrundprozess kann dann den Schlüsselraum SCAN veraltete Schlüssel identifizieren.

Eine andere Möglichkeit ist die Verwendung von Sorted Sets zur Verwaltung der Zähler. In einigen Fällen können Sie nur einen sortierten Satz verwenden, indem Sie sowohl TTL als auch Zähler in die Partitur jedes Mitglieds (mit Ganzzahl und Nachkommastellen) umwandeln. In den meisten Fällen ist es jedoch einfacher, zwei sortierte Sätze zu verwenden - einen für TTLs und den andere Pelzwerte.

+0

Ich werde es versuchen! Vielen Dank! –

+0

Gibt es eine Möglichkeit, nach bestimmten Schlüsseln zu suchen, oder durchsuchen Sie einfach alle und suchen Sie jeden einzelnen Schlüssel –

Verwandte Themen