大家在写接口的时候,比如有这样一个场景用户浏览,需要给文章增加浏览量
- 方案一:加浏览量这个操作,是有一个channel监听,程序一直在跑,如果浏览了帖子,新开一个goruntime往这个channel里面写入数据(ps:增加浏览量的channel可能阻塞),通知监听的channel执行
- 方案二: 在用户请求接口返回这前的这个过程就给帖子的浏览量增加了一
这两种设计方式哪一种更好呢?我觉得第一种会更好,会不会出现什么问题呢?
大家在写接口的时候,比如有这样一个场景用户浏览,需要给文章增加浏览量
这两种设计方式哪一种更好呢?我觉得第一种会更好,会不会出现什么问题呢?
概数
,比如读取到的值是1234
,那就显示1.2K
。2 回答1.3k 阅读
2 回答1.1k 阅读
2 回答1.1k 阅读
2 回答855 阅读
3 回答673 阅读
997 阅读
1 回答776 阅读
用户对文章的浏览请求,这个是读操作,是可以被Cache缓存(如果有的话)的,并不需要操作数据库。
增加浏览量这个操作涉及写数据库,而且通常浏览量并不要求很强的一致性和实时性,可以不必等浏览量增加操作执行完成(数据库写成功)就返回。
所以第一种方式把增加浏览量的操作异步处理,且不等待处理结果,可以降低处理用户浏览请求的处理时间,对提升性能是有帮助的。
可能需要注意的是,避免恶意或突发大量请求,导致goroutine泛滥,占用太多内存,当然这个应该在用户建立连接时就做一些流控处理。