首页 新闻 会员 周边

电商项目出出主意

0
悬赏园豆:20 [已解决问题] 解决于 2023-10-31 10:25

场景:
1: 用户浏览的商品,记录该商品信息到redis。
2: 写一个定时调度程序。将该用户最近浏览商品记录时间与当前时间比较,达到入库间隔将这一批redis商品数据记录到mysql的足迹表中。已存在的商品更新其浏览时间。并删除已同步的redis数据
3:用户在读取足迹记录时要保证实时性。该如何设计读取方式?

景伟·郭的主页 景伟·郭 | 初学一级 | 园豆:199
提问于:2023-08-24 09:24
< >
分享
最佳答案
0

1. 并行查 redis、db 中的足迹 ID 数据 - 保持时效性

2. 将以上的结果聚合,再查一次数据库详情。

收获园豆:10
幻天芒 | 高人七级 |园豆:37185 | 2023-08-31 10:33
其他回答(4)
0

书《从程序员到架构师》,作者:王伟杰
看看书中是否有适合你的场景 和 解决方案。

快乐的凡人721 | 园豆:3975 (老鸟四级) | 2023-08-24 09:32

大哥我谢谢你。看完我要跟领导说拜拜了

支持(0) 反对(0) 景伟·郭 | 园豆:199 (初学一级) | 2023-08-24 09:36

@郭景伟Larva:
其实,你还没介绍 整个项目的背景:单体项目、微服务项目?小、大项目?用户量?
不同的类型,有不同的方案。
要是你在 淘宝、天猫 干这个项目,方案也应该不同吧。

读取足迹记录时要保证实时性:你的需求、想要实现的是 这个?

支持(0) 反对(0) 快乐的凡人721 | 园豆:3975 (老鸟四级) | 2023-08-24 09:40

@快乐的凡人721: 这是一个微服务项目,用户量还没有具体数量。问题出现在读取时如果读redis只能读到最近的数据,再往下翻就必须读mysql了。属于两个数据源了,

支持(0) 反对(0) 景伟·郭 | 园豆:199 (初学一级) | 2023-08-24 09:43

@郭景伟Larva:
redis存储了多少数据?最好是固定值,比如,20条,,这样,1、2页都是在 redis查询了。
第三页,就从 mysql查询。
要是redis不满20条,启动时从mysql加载20条。
行?

支持(0) 反对(0) 快乐的凡人721 | 园豆:3975 (老鸟四级) | 2023-08-24 09:49
0

用户规模大的话,redis不是要炸了?考不考虑分发浏览记录到mq里,再转入es实时查询。

kingdumpling | 园豆:206 (菜鸟二级) | 2023-08-24 11:04

问题就出现在只要redis数据跑出去,再查询的时候无法保证实时性与数据一致性。因为redis有一部分,es有一部分

支持(0) 反对(0) 景伟·郭 | 园豆:199 (初学一级) | 2023-08-24 11:07

@郭景伟Larva: 不走redis,直接分发到mq里转es存储呢?页面上查看足迹做个过渡动画牺牲一点用户体验不知是否可行

支持(0) 反对(0) kingdumpling | 园豆:206 (菜鸟二级) | 2023-08-24 11:19

@kingdumpling: 我是建议直接写es的。然后以时间和id作为复合主键。这样一来按照日期读取数据。但是负责人说想把压力给到redis。不直接写库

支持(0) 反对(0) 景伟·郭 | 园豆:199 (初学一级) | 2023-08-24 11:22

@郭景伟Larva: 负责人加钱上配置吧,哈哈

支持(0) 反对(0) kingdumpling | 园豆:206 (菜鸟二级) | 2023-08-24 11:25
0

实际上可以分成实时数据和历史数据两部分:

1、用户浏览的商品,记录该商品信息到redis,同时向阿里云的tablestore写一份(类似es,支持查询和分页,分页pagesize最大值应该是1w,效率很高)。
2、定时从redis读取数据写入到mysql,落库。这里使用redis纯粹就是为了延迟入库,降低数据库写入的压力
3、近期(如一天内的数据)数据或者模糊查询从tablestore查询,超过一天的可以查mysql数据库。

这样既解决了mysql数据库读写压力又解决了实时展示用户浏览轨迹的问题。

收获园豆:10
智客工坊 | 园豆:1864 (小虾三级) | 2023-08-26 17:45
0

这种数据不走redis, 直接弄个mongodb数据库存储就行吧, 单纯的存入,读取

百鸟朝凤 | 园豆:260 (菜鸟二级) | 2023-08-31 10:09
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册