之前有个地方说过了.update table set state=lock where state=enable and id=123
就是业务状态.将每一个业务操作定义为2个状态间的迁移
? 能否说的详细点吗? 这个抢单功能就是一个在商户后台进行抢单,但抢到这个单的时候,列表里的这个单就添加到商户的订单列表里,同时这个抢单列表就没有这个单,别的商户也抢不到,有一个极端情况,就是两个商户同时抢单。
@惊天伟地: 抢单接口传入单id
在抢单接口开始时执行抢单验证
update 可抢单列表 set state=lock where state=enable and id=单id
返回修改行数.行数为1就抢单成功为0就失败.
是用的事务吗?之前做过就是在事务之前先锁定,事务开始,接触锁定,其实就是事务那一块加个判断。不知道有木有帮组
想用的事物 但是我的是ecshop 用的是myisam 它是表锁 不是行锁
@惊天伟地: 表锁肯定不行的,http://blog.csdn.net/e421083458/article/details/17569657,你看下这个吧,设置这个系统变量concurrent_insert
1 换成innodb
2 既然用myisam,表锁无法回避的情况下,中间用队列做隔离,保证后面顺序执行,通过更新条件判断是否抢到。
乐观锁,可以去了解一下。使用时间戳。
抢单锁定,保持数据的准备性,一单对应一个商家。