0

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

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

  • post_id
  • post_type - A/B
  • 可见 - 是/否
  • 已检查 - 是/否

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

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

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

4

1 回答 1

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>
于 2015-04-24T17:12:16.043 回答