上一篇:多进程中慎用redis的incr自增命令(2020-05-19 00:18:14)

多进程中慎用redis的incr自增命令

2020年05月19日 00:18


一秒钟800条的采集数据往redis队列里丢,翟码农取出消费,多进程,lrange+ltrim每次500条,redis pipe管道全用上了,还是消费不过来。


之前处理一条数据产生5条警告数据,生成与消费两边速度相当。但当一条数据产生50多条警告时,消费就明显吃力。


为了更好的优化代码,打日志后发现其中有个redis 的incr命令方法严重影响到了性能。


当时多进程运行下,$id = $redis->incr($key)这一行代码耗时240毫秒,如果直接换成$id=1,就是微秒级了。


不难理解,redis由于是单线程的,在对$key进行自增时,防止多进程下生成相同id值,redis必然会对$key进行加锁,如此就相当于每个进程必须等待上一个进程处理自增结束后,才可开始自己的自增操作。


所以实在对代码感到无能为力时,就按这种傻瓜方法来吧,每段都加上时间耗时的计算日志,这样子也不用劳神苦思的想了,直接看耗时结果来找问题。


本文为翟码农个人博客里有关开发经验总结的原创文章,转载请注明出处:http://www.zhai14.com/blog/watch-the-command-of-incr-in-redis-when-run-multiple-process-program.html



  • 2020年05月18日 23:55文章创建
  • 2020年05月19日 00:18文章发布
上一篇:多进程中慎用redis的incr自增命令(2020-05-19 00:18:14)
我要评论
«-必填,限2-20个字符,中文/字母/字母数字组合
«-评论后,邮箱会收到激活链接,未激活邮箱的留言,将无法显示
评论列表
暂无评论,期待你的评论哦!
回到顶部