使用排序集到通知系统

时间:2015-04-24 16:33:10

标签: python notifications redis redis-py

我正在使用redis sorted sets来保存用户通知。但由于我从未做过通知系统,我问的是我的逻辑。

我需要为每个通知保存4件事。

  • post_id
  • post_type - A / B
  • 可见 - Y / N
  • 选中 - 是/否

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

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

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

1 个答案:

答案 0 :(得分:7)

这实际上取决于您需要如何查询数据。

解决此问题的最常见方法是使用排序的排序集和每个对象的哈希值。

所以:

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

您可以使用ZRANGE按顺序获取最新通知,然后使用流水线调用HMGET来获取每个对象的属性。

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

假设您有这样一个排序集,当用户解除您要执行的通知时:

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