使用排序集通知系统

Use sorted set to notifications system

我正在使用 Redis sorted sets 来保存用户通知。但是因为我从来没有做过通知系统,所以我问我的逻辑。

我需要为每个通知保存 4 个东西。


我的问题是如何将这种类型的结构存储在排序集中?

ZADD users_notifications:1 10 1_A_Y_Y 
ZADD users_notifications:1 20 2_A_Y_N
....

在redis中有更好的方法来做这类事情吗?在上面的例子中,我在每个元素中保存了四个东西,我需要用服务器语言中的下划线分隔。

这真的取决于您需要如何查询数据。

解决此问题的最常见方法是对顺序使用排序集,对每个对象使用散列。

所以:

ZADD notifications:<user-id> <timestamp> <post-id>
HMSET notifications:<user-id>:<post-id> type <type> visible <visible> checked <checked>

您将使用 ZRANGE to get the latest notifications in order and then a pipelined call to HMGET 获取每个对象的属性。

正如我提到的,这取决于您需要如何访问数据。例如,如果您总是向用户显示可见和未检查的通知,那么您可能希望将这些 ID 存储在不同的排序集中,这样您就不必查询状态。

假设您有这样一个排序集,当用户关闭通知时,您会这样做:

HSET notifications:<user-id>:<post-id> visible 0
ZREM notifications:<user-id>:visible <post-id>