beego访问redis

用beego开发一个访问REDIS的小服务,采用TCP形式,协议采用PROTOBUF,当每一个请求消息过来时,经过一系统的处理,最后发一个协程的模式去REDIS取数据,然后返回。采用协程的模式,请求的并发量是可以做的很大,但是REDIS采用连接池的模式,当一秒发几K的请求时,REDIS的连接池很快就耗光了。也就是说用GO来开发,数据入口的并发量是大了,采用大量的协程,但是到REDIS这一层却卡住了。 请教一下,各位你们在这种情况下是如何去做的,并发量大时去取REDIS数据时,多谢!
已邀请:

xkey - go

赞同来自: thomas_y yuyifeichina go、go、go sdkai1989

你这问题解决方案可大可小:
1、按照谢大说的在入口处做限流
2、后端多个redis服务节点,对数据分片
3、你的服务也多个节点,每个节点后端一个redis,服务端前面再做一层数据分片的决策层
4、如果上面方案还是扛不住,那么在服务本地做二级缓存,内存做一层,redis做第二层,数据过期策略自己考虑,这样数据可能会存在一定的读脏,只要服务能忍受也行
5、把上面4点全部综合起来搞一套

astaxie - 创造、获取、分享、传播和应用Go

赞同来自: yuyifeichina

你这种情况下,我的建议是采用ratelimit在入口处限制了。

要回复问题请先登录注册