使用排序集到通知系统

anv*_*nvd 0 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
....
Run Code Online (Sandbox Code Playgroud)

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

dja*_*ski 7

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

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

所以:

ZADD notifications:<user-id> <timestamp> <post-id>
HMSET notifications:<user-id>:<post-id> type <type> visible <visible> checked <checked>
Run Code Online (Sandbox Code Playgroud)

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

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

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

HSET notifications:<user-id>:<post-id> visible 0
ZREM notifications:<user-id>:visible <post-id>
Run Code Online (Sandbox Code Playgroud)