用户如何使用Redis流创建网络通知(收件箱)?

问题描述 投票:0回答:1

我想由用户使用 Redis 流创建网络通知(收件箱)。

我现在正在使用RDB(字段:id,user_id,deep_link,message,created_at)处理网络通知(收件箱),但我认为它在RDB资源和管理方面效率低下。

the example I want to make

这张图片正是我想要的通知类型。

->

1)select by user, 2)order by time, 3)types are divided, but notifications look up at once

但是在我的服务中,有4种通知(1.全部成功2.全部失败3.部分成功4.不相关)。

4个通知的框架相同,但细节不同,例如

"{title} - all success", "{item[0]} - partial success"

我问chat gpt,他回答了...

  1. 按用户制作直播
  2. 按用户查找(流)
  3. 按通知类型分开
  4. 对单独的通知进行后处理以创建通知短语

但是在我看来,如果用户较多,redis 会太重,因为按用户制作流。

有没有更有效的方法呢? 或者我觉得用redis hashmap也不错,你觉得怎么样?

redis notifications backend
1个回答
0
投票

您可以为此诉诸二级索引。二级索引已由 Redis Stack 提供,很快将由 Redis 8 提供。

请下载并安装Redis Stack。它捆绑了所有模块,包括搜索、JSON、时间序列和概率数据结构。

相同的模块将成为标准 Redis 8 社区版的组成部分。目前,Redis 8 M02 已开始测试(推荐选项,但尚未正式发布)。

提供您的数据(散列或 JSON 工作,示例中使用散列)。

HSET notification:vsdfv2f title "How to merge different contents" active 1 type 1 time 1731573589 user "user1"
HSET notification:rgsfdki title "Show two distinct column count" active 1 type 2 time 1731573631 user "user2"
HSET notification:svfsths title "How to install Django" active 1 type 3 time 1731573728 user "user1" 
HSET notification:h3w52rg title "Sorting data in Redis" active 1 type 3 time 1731573729 user "user1" 
HSET notification:22f5gjh title "How to install Redis" active 1 type 4 time 1731573730 user "user3" 
HSET notification:235u774 title "What is the best method to..." active 1 type 3 time 1731573730 user "user3" 

在所需类型上创建索引。

FT.CREATE idx:notification ON HASH PREFIX 1 notification: SCHEMA active NUMERIC user TAG time NUMERIC SORTABLE type NUMERIC

获取用户的所有活动通知

FT.SEARCH idx:notification '@active:[1 1] @user:{user1}' SORTBY time ASC RETURN 1 title LIMIT 0 10
1) (integer) 3
2) "notification:vsdfv2f"
3) 1) "title"
   2) "How to merge different contents"
4) "notification:svfsths"
5) 1) "title"
   2) "How to install Django"
6) "notification:h3w52rg"
7) 1) "title"
   2) "Sorting data in Redis"

设置通知,如图所示。

HSET notification:vsdfv2f active 0

再次搜索

FT.SEARCH idx:notification '@active:[1 1] @user:{user1}' SORTBY time ASC RETURN 1 title LIMIT 0 10
1) (integer) 2
2) "notification:svfsths"
3) 1) "title"
   2) "How to install Django"
4) "notification:h3w52rg"
5) 1) "title"
   2) "Sorting data in Redis"

按类型过滤

FT.SEARCH idx:notification '@active:[1 1] @user:{user3} @type:[3 3]' SORTBY time ASC RETURN 1 title LIMIT 0 10
1) (integer) 1
2) "notification:235u774"
3) 1) "title"
   2) "What is the best method to..."
© www.soinside.com 2019 - 2024. All rights reserved.