+-
redis高并发下写入数据丢失

使用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个数据
image.png

5000线程的测试结果,5000个数据全部写进队列了
image.png

感谢,感谢!