扫码关注官方订阅号
用YII框架开发的一个企业号,一条新闻里面,用户评论时给这条评论增加一个楼层来显示。楼层数是存放在评论表里面的。这种并发应该怎么处理?
学习是最好的投资!
不要分配楼层序数,楼层序数是根据取出的结果在输出的时候才计算的
对当前用户来说,可能自己的评价就是显示在它能看到的下一个楼层,但是对数据来说,不管是不是并发,总是有先后顺序的,总能安装一种规则排出顺序来,在当前用户刷新了页面后他才能确定自己真实的楼层,就跟抢楼一样。
评论表设置一个自增id,程序插入数据的时候,不声明楼层数,插入数据后,假如获取返回的自增id为100,查询当前新闻id下,自增id小于等于100的记录数,即为当前评论的楼层数,再更新到评论表里。
我猜的话楼主你每次写入表之前都会取一下当前的最大楼层,然后有个+1的处理,再插入。这样并发情况下,确实会出问题。小弟愚见,有两套方案:
用PHP文件锁,保证并发插入楼层不会错乱。
redis做队列。最大楼层可以用一个单独的key=>value保存,更新速度肯定快。然后再用list做个队列,保证并发下,不存在评论重复的情况。
楼主可以自己试试,我的回答有问题的话还望大神指点指点。
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
不要分配楼层序数,楼层序数是根据取出的结果在输出的时候才计算的
对当前用户来说,可能自己的评价就是显示在它能看到的下一个楼层,但是对数据来说,不管是不是并发,总是有先后顺序的,总能安装一种规则排出顺序来,在当前用户刷新了页面后他才能确定自己真实的楼层,就跟抢楼一样。
评论表设置一个自增id,程序插入数据的时候,不声明楼层数,插入数据后,假如获取返回的自增id为100,查询当前新闻id下,自增id小于等于100的记录数,即为当前评论的楼层数,再更新到评论表里。
我猜的话楼主你每次写入表之前都会取一下当前的最大楼层,然后有个+1的处理,再插入。这样并发情况下,确实会出问题。小弟愚见,有两套方案:
用PHP文件锁,保证并发插入楼层不会错乱。
redis做队列。最大楼层可以用一个单独的key=>value保存,更新速度肯定快。然后再用list做个队列,保证并发下,不存在评论重复的情况。
楼主可以自己试试,我的回答有问题的话还望大神指点指点。