2017-04-04 3 views
0

Ich schreibe Laravel-Anwendung, wo ich aktuellen Benutzer alle anderen Benutzer auf der Seite zeigen möchten.Kann ich diese Art von Daten in Redis speichern?

Ich möchte Redis verwenden, um diese Art von Informationen zu speichern, so zum Beispiel, wenn der Benutzer 1 Besuche Seite /item/35, dann Redis müssen diese Informationen speichern:

{'/item/35': {1: last_visit_time_in_seconds}} 

Wo last_visit_time_in_seconds unixtimestamp ist.

Wenn zwei zusätzliche Benutzer besuchen gleiche Seite, dann würden Redis enthalten:

{'/item/35': {1: seconds}, {12: seconds}, {2425: seconds}} 

Benutzer mit ids 1, 12 und 2425 sind jetzt dieser Seite sehen. Wenn für {1: seconds} für eine kurze Zeit (wie 30 Sekunden) keine Updates vorhanden sind, muss dieser Artikel aus diesem Objektcache entfernt werden. Das Frontend aktualisiert regelmäßig den Status des Caches, dies ist also eine Schutzmaßnahme gegen das Schließen des Browserfensters.

Möglicherweise gibt es einen besseren Weg in Redis zu speichern/erhalten diese Art von Informationen (Karte von item zu der Liste der Benutzer mit ihrer letzten Besuchszeit).

+0

Google-Präsenz Kanäle und Websockets, würde es helfen, ich denke –

+0

Info wird über Websockets sowieso geliefert. In Questiong wird erläutert, wie diese Informationen im Backend gespeichert werden. –

Antwort

0

Sie können die item Id als Schlüssel haben und der Wert wäre ein Array, das Sie zu ihm irgendwelche Updates (neue Besuche) schieben werden.

0

Sie können bitmaps dafür verwenden. Es ist einfach und sehr, sehr schnell.

Ihre url + timestamp wäre der Schlüssel, und Sie würden das Bit auf 1 für jede userId besuchen.

SETBIT '/item/35:timestamp' userId 1

Dann haben Sie eine BITCOUNT auf diesem Schlüssel:

BITCOUNT '/item/35:timestamp'

können Sie Vereinigung täglich oder monatlich Bitzählwerte und superschnelle Analysen auf täglich auf einer Seite, monatliche Besucher. Here is a nice article on this.

Verwandte Themen