登录
首页 >  Golang >  Go问答

redis高并发下写入数据丢失

来源:SegmentFault

时间:2023-02-16 15:36:42 199浏览 收藏

怎么入门Golang编程?需要学习哪些知识点?这是新手们刚接触编程时常见的问题;下面golang学习网就来给大家整理分享一些知识点,希望能够给初学者一些帮助。本篇文章就来介绍《redis高并发下写入数据丢失》,涉及到Redis、go、后端,有需要的可以收藏一下

问题内容

使用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

感谢,感谢!

正确答案

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

今天带大家了解了Redis、go、后端的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>