我想由用户使用 Redis 流创建网络通知(收件箱)。
我现在正在使用RDB(字段:id,user_id,deep_link,message,created_at)处理网络通知(收件箱),但我认为它在RDB资源和管理方面效率低下。
这张图片正是我想要的通知类型。
->
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,他回答了...
但是在我看来,如果用户较多,redis 会太重,因为按用户制作流。
有没有更有效的方法呢? 或者我觉得用redis hashmap也不错,你觉得怎么样?
您可以为此诉诸二级索引。二级索引已由 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..."