anv*_*nvd 0 python notifications redis redis-py
我正在使用redis sorted sets来保存用户通知.但由于我从未做过通知系统,我问的是我的逻辑.
我需要为每个通知保存4件事.
我的问题是如何在排序集中存储这种类型的结构?
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中有更好的方法来做这种类型的东西吗?在上面的例子中,我在每个元素中保存了四个东西,我需要在服务器语言中用下划线分割.
这实际上取决于您需要如何查询数据.
解决此问题的最常见方法是使用排序的排序集和每个对象的哈希值.
所以:
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)