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

Benachrichtigungs- und Nachrichtenbereich mit Redis

Meiner Meinung nach sollte diese Funktion serverseitig gehandhabt werden, insbesondere wenn Sie erwarten, dass Benutzer mehrere Arten von Clients verwenden (z. B. Browser, Telefon usw.)

Jedes Ihrer Ereignisse sollte einen Zeitstempel haben, um zu wissen, wann jedes Ereignis stattgefunden hat, und um entsprechende Bereichssuchen durchführen zu können, falls Sie beispielsweise die letzten 24 Stunden von Ereignissen oder Ereignisse nach Zeitstempel X benötigen.

Wenn dann der Benutzer, der einem anderen Benutzer folgt, seine Benachrichtigungen ansieht, können Sie einen Zeitstempel als Prüfpunkt festlegen, um zu wissen, bis zu welchem ​​​​Ereignis dieser Benutzer bereits gesehen hat, und dann nur die Ereignisse anzeigen, die nach diesem Prüfpunkt liegen.

Die Art und Weise, wie ich Zeitreihen in REDIS in einem unserer Projekte implementiert habe, ist die Verwendung von Sorted Sets (http://redis.io/topics/data-types#sorted-sets). In Ihrem Fall könnten Sie Folgendes speichern:

user1EventsKey -> [{ts1, eventKey1}, {ts2, eventKey2}, {ts3, eventKey3},... ]  
                                                           # This is the sorted set
eventKey1 -> [photo1, photo2, photo3]
eventKey2 -> [photo4, photo5]
...

user2Checkpoint -> tsA   #where  ts2 < tsA < ts3

Jetzt wissen Sie, dass das nächste Mal, wenn Benutzer2 die Benachrichtigungen anzeigt, nur die Ereignisse nach tsA mit ZRANGEBYSCORE user1EventsKey ts2 +inf angezeigt werden um alle Ereignisschlüssel zu erhalten und dann können Sie die Ereignisse nacheinander anzeigen.

PS. Der Zeitstempel kann im UNIX-Format gespeichert werden.

Ich hoffe, das hilft.