存储在redis中的通知

时间:2014-07-26 09:27:56

标签: redis

我最近一直想知道如何在我的迷你社交网络上存储用户通知(您可以将其视为Facebook通知)。它们被创造一次而永远不会改变。会有很多。

我需要按用户查询它们并按创建日期排序。

看起来像某种NoSql解决方案会做,我想尝试redis。但是因为我之前从未使用它,所以我不知道应该使用哪种数据结构以及如何有效地使用主题。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

Redis非常适合此用例。 使用sorted set为每个用户提供通知,并将unix时间戳记作为分数。

您可以为每个已排序的集合提供基于以下模式的键: user:<user id>:notifications

为给定用户添加通知:

ZADD <current_unix_timestamp> user:<user_id>:notifications "some notification"

然后使用ZREVRANGEBYSCORE获取最近的通知

ZREVRANGEBYSCORE user:<user id>:notifications +inf <last_visit_timestamp>

或者,如果您想要此用户的所有通知,从最新到最旧:

ZREVRANGEBYSCORE user:<user id>:notifications +inf -inf

更新:不要忘记Redis默认是内存数据库;如果磁盘上的两个写入之间发生崩溃,您可能会丢失一些通知。写操作的频率在redis.conf文件中定义。如果通知对您至关重要,并且您在崩溃后无法重建它们: *考虑使用2个Redis实例,一个奴隶和一个主人,由Redis Sentinel监控; *或将写入设置转为“在每次写入操作时保存在磁盘上”,但这意味着您将失去速度; *或使用其他数据库。

相关问题