抢激活码,怎么能没有脏数据?使用mysql行锁能行吗?

马迪奥1 发布于 2014/04/01 17:57
阅读 775
收藏 1

开源之夏第三届火热来袭,高校学生参与赢万元奖金!>>>

@南湖船老大 你好,想跟你请教个问题:现在需要做抢激活码的功能,激活码是随机的,怎么才能确保不会出现多个用户查询到同一个激活码呢?行锁可以吗?我试过行锁,如果锁到一条记录,另外session再去查询这条记录就会等待锁,能不用等待锁,再去查询其他记录吗?

加载中
0
宏哥
宏哥

看看mysql 牛们怎么说

0
马迪奥1
马迪奥1

引用来自“宏哥”的评论

看看mysql 牛们怎么说

坐等

0
lock_free
lock_free


这个激活码是预先生成好的吗?如过是,这个可以用乐观锁所吧,

随机查询激活码

其他操作等等

更新激活码版本,更新条数==1 成功,否则回滚事务,重试。


0
泡不烂的凉粉
泡不烂的凉粉

解决方案太多。 在此不一一列举哦。 利用数据库的唯一所以可保证唯一。用更新状态可保证激活码生成成功。 用预生成的状态外加激活使用也是一种。

0
马迪奥1
马迪奥1

引用来自“lock_free”的评论


这个激活码是预先生成好的吗?如过是,这个可以用乐观锁所吧,

随机查询激活码

其他操作等等

更新激活码版本,更新条数==1 成功,否则回滚事务,重试。


用的是PHP,要是JAVA就好搞了

0
马迪奥1
马迪奥1

引用来自“泡不烂的凉粉”的评论

解决方案太多。 在此不一一列举哦。 利用数据库的唯一所以可保证唯一。用更新状态可保证激活码生成成功。 用预生成的状态外加激活使用也是一种。

恩,我的问题关键是怎么避免有脏数据产生

0
南湖船老大
南湖船老大

注意事务的隔离性,不要脏数据,第二个级别的隔离性就可以保证了,MySQL 数据库的默认事务隔离级别就是 READ_COMMITTED,已经是能满足无脏读了。

不想要等待,那就是楼上说的预生成了吧

0
0
马迪奥1
马迪奥1

引用来自“南湖船老大”的评论

注意事务的隔离性,不要脏数据,第二个级别的隔离性就可以保证了,MySQL 数据库的默认事务隔离级别就是 READ_COMMITTED,已经是能满足无脏读了。

不想要等待,那就是楼上说的预生成了吧

感谢

0
马迪奥1
马迪奥1

引用来自“泡不烂的凉粉”的评论

解决方案太多。 在此不一一列举哦。 利用数据库的唯一所以可保证唯一。用更新状态可保证激活码生成成功。 用预生成的状态外加激活使用也是一种。

感谢

OSCHINA
登录后可查看更多优质内容
返回顶部
顶部
返回顶部
顶部