使用排序集通知系统
Use sorted set to notifications system
我正在使用 Redis sorted sets
来保存用户通知。但是因为我从来没有做过通知系统,所以我问我的逻辑。
我需要为每个通知保存 4 个东西。
- post_id
- post_type - A/B
- 可见 - Y/N
- 已检查 - Y/N
我的问题是如何将这种类型的结构存储在排序集中?
ZADD users_notifications:1 10 1_A_Y_Y
ZADD users_notifications:1 20 2_A_Y_N
....
在redis中有更好的方法来做这类事情吗?在上面的例子中,我在每个元素中保存了四个东西,我需要用服务器语言中的下划线分隔。
这真的取决于您需要如何查询数据。
解决此问题的最常见方法是对顺序使用排序集,对每个对象使用散列。
所以:
ZADD notifications:<user-id> <timestamp> <post-id>
HMSET notifications:<user-id>:<post-id> type <type> visible <visible> checked <checked>
您将使用 ZRANGE to get the latest notifications in order and then a pipelined call to HMGET 获取每个对象的属性。
正如我提到的,这取决于您需要如何访问数据。例如,如果您总是向用户显示可见和未检查的通知,那么您可能希望将这些 ID 存储在不同的排序集中,这样您就不必查询状态。
假设您有这样一个排序集,当用户关闭通知时,您会这样做:
HSET notifications:<user-id>:<post-id> visible 0
ZREM notifications:<user-id>:visible <post-id>
我正在使用 Redis sorted sets
来保存用户通知。但是因为我从来没有做过通知系统,所以我问我的逻辑。
我需要为每个通知保存 4 个东西。
- post_id
- post_type - A/B
- 可见 - Y/N
- 已检查 - Y/N
我的问题是如何将这种类型的结构存储在排序集中?
ZADD users_notifications:1 10 1_A_Y_Y
ZADD users_notifications:1 20 2_A_Y_N
....
在redis中有更好的方法来做这类事情吗?在上面的例子中,我在每个元素中保存了四个东西,我需要用服务器语言中的下划线分隔。
这真的取决于您需要如何查询数据。
解决此问题的最常见方法是对顺序使用排序集,对每个对象使用散列。
所以:
ZADD notifications:<user-id> <timestamp> <post-id>
HMSET notifications:<user-id>:<post-id> type <type> visible <visible> checked <checked>
您将使用 ZRANGE to get the latest notifications in order and then a pipelined call to HMGET 获取每个对象的属性。
正如我提到的,这取决于您需要如何访问数据。例如,如果您总是向用户显示可见和未检查的通知,那么您可能希望将这些 ID 存储在不同的排序集中,这样您就不必查询状态。
假设您有这样一个排序集,当用户关闭通知时,您会这样做:
HSET notifications:<user-id>:<post-id> visible 0
ZREM notifications:<user-id>:visible <post-id>