使用redis的list类型做消息队列,通过这个队列将要写到mysql的数据延后批量写入
遇到的问题是,使用jmeter测并发的时候发现,10000线程的时候,写到redis的数据会丢失,而且丢失数量是不规则的;5000线程以内则一切正常,这是什么原因?如何去优化?替代方案比如MQ暂时不考虑。
使用语言是Go,代码如下,其实也很简单,只是往redis队列中推入数据,用Redis Manager观察:
func Testt(c *gin.Context) {
// 这是测试数据,数据长度小得到的也是一样的结果
//x := `{"Dateline":"2020-08-31 13:34:59","Error":200002,"Id":"ee0da19f-eb05-4728-8e23-107336043ede","Ip":"192.168.2.150","Method":"POST","Resp":"null"}`
// 这是封装的 LPush函数
dbhelper.Lpush("testttt", "_api", "1")
c.JSON(200, gin.H{
"e": 0,
"msg": "success",
})
}
10000 线程的测试结果,只存进去1542个数据
5000线程的测试结果,5000个数据全部写进队列了
感谢,感谢!
你的变量没控制完啊,你的那个封装方法内出错又没有抛出的话,你的jmeter的结果是如何推导出你的结果的呢?