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

感谢,感谢!

阅读 4.9k
1 个回答

你的变量没控制完啊,你的那个封装方法内出错又没有抛出的话,你的jmeter的结果是如何推导出你的结果的呢?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏