Moim zdaniem ta funkcja powinna być obsługiwana po stronie serwera, zwłaszcza jeśli oczekujesz od użytkowników korzystania z wielu typów klientów (np. przeglądarki, telefonu itp.)
Każde z Twoich wydarzeń powinno mieć sygnaturę czasową, aby wiedzieć, kiedy każde zdarzenie miało miejsce i aby móc odpowiednio przeszukiwać zakresy, w przypadku, gdy musisz uzyskać na przykład ostatnie 24 godziny wydarzeń lub zdarzenia po sygnaturze czasowej X.
Następnie, gdy użytkownik, który obserwuje innego użytkownika, patrzy na jego powiadomienia, możesz ustawić znacznik czasu jako punkt kontrolny, aby wiedzieć, do którego wydarzenia ten użytkownik już widział, a następnie wyświetlać tylko zdarzenia, które są po tym punkcie kontrolnym.
Sposób, w jaki zaimplementowałem szeregi czasowe w REDIS w jednym z naszych projektów, to użycie Sorted Sets (http://redis.io/topics/data-types#sorted-sets). W twoim przypadku możesz przechowywać:
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
Teraz wiesz, że następnym razem, gdy użytkownik 2 wyświetli powiadomienia, pokażesz tylko zdarzenia występujące po tsA, używając ZRANGEBYSCORE user1EventsKey ts2 +inf
aby uzyskać wszystkie klucze zdarzeń, a następnie jeden po drugim możesz wyświetlić zdarzenia.
PS. Znacznik czasu może być przechowywany w formacie UNIX.
Mam nadzieję, że to pomoże.