不懂就问,使用 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 个数据全部写进队列了:
