用YII框架开发的一个企业号,一条新闻里面,用户评论时给这条评论增加一个楼层来显示。
楼层数是存放在评论表里面的。
这种并发应该怎么处理?
用YII框架开发的一个企业号,一条新闻里面,用户评论时给这条评论增加一个楼层来显示。
楼层数是存放在评论表里面的。
这种并发应该怎么处理?
对当前用户来说,可能自己的评价就是显示在它能看到的下一个楼层,但是对数据来说,不管是不是并发,总是有先后顺序的,总能安装一种规则排出顺序来,在当前用户刷新了页面后他才能确定自己真实的楼层,就跟抢楼一样。
评论表设置一个自增id,程序插入数据的时候,不声明楼层数,插入数据后,假如获取返回的自增id为100,查询当前新闻id下,自增id小于等于100的记录数,即为当前评论的楼层数,再更新到评论表里。
我猜的话楼主你每次写入表之前都会取一下当前的最大楼层,然后有个+1的处理,再插入。这样并发情况下,确实会出问题。小弟愚见,有两套方案:
用PHP文件锁,保证并发插入楼层不会错乱。
redis做队列。最大楼层可以用一个单独的key=>value保存,更新速度肯定快。然后再用list做个队列,保证并发下,不存在评论重复的情况。
楼主可以自己试试,我的回答有问题的话还望大神指点指点。
4 回答1.3k 阅读✓ 已解决
8 回答1.2k 阅读
2 回答1.3k 阅读✓ 已解决
3 回答1k 阅读✓ 已解决
1 回答993 阅读✓ 已解决
2 回答850 阅读✓ 已解决
2 回答1.7k 阅读
不要分配楼层序数,楼层序数是根据取出的结果在输出的时候才计算的