我正在使用redis sorted sets
来保存用户通知。但由于我从未做过通知系统,我问的是我的逻辑。
我需要为每个通知保存4件事。
我的问题是如何在排序集中存储这种类型的结构?
ZADD users_notifications:1 10 1_A_Y_Y
ZADD users_notifications:1 20 2_A_Y_N
....
在redis中有更好的方法来做这种类型的东西吗?在上面的例子中,我在每个元素中保存了四个东西,我需要在服务器语言中用下划线分割。
答案 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>