In my opinion this function should be handled server side, especially if you expect users to use multiple types of clients (e.g., browser, phone etc.)
Each of your events should have a timestamp in order to know when each event happened and in order to be able to do range searches accordingly, in case you need to get, for example the last 24 hours of events, or events after timestamp X.
Then when the user that follows another user looks at her notifications you can set a timestamp as a checkpoint to know up to which event this user has already seen and then only show the events that are after that checkpoint.
The way I have implemented timeseries in REDIS in one of our projects is by using Sorted Sets (http://redis.io/topics/data-types#sorted-sets). In your case you could store:
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
Now you know that the next time user2 views the notifications you'll only show whatever events are after tsA using ZRANGEBYSCORE user1EventsKey ts2 +inf
to get all the event keys and then one by one you can display the events.
PS. The timestamp can be stored in the UNIX format.
I hope this helps.