mysql有没有类似和memcached里那样的CAS版本控制?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql有没有类似和memcached里那样的CAS版本控制?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2308字,纯文字阅读大概需要4分钟。
内容图文
![mysql有没有类似和memcached里那样的CAS版本控制?](/upload/InfoBanner/zyjiaocheng/239/65feed0f009946fc9409ac56e165aee6.jpg)
memcached的CAS是这么个原理:
首先cas token其实就是一个版本号,
1,我取一条数据时,会顺带返回一个版本号($casToken)给我:
$data = $m->get('ip_block', null, $casToken);
2,然后我修改$data后,再回存这个$data时,我需要靠这个版本号才能存回去:
$m->cas($casToken, 'ip_block', $data);
如果1、2过程之间已经有人存了$data,那么由于版本号$casToken已经发生变化,第2步就会失败。
有了CAS就可以保证数据最新,可以防止对有限的资源争夺时,由于并发缘故,导致的重复问题,比如我还剩1个手机出售,但却被3个人同时下了订单。
求教mysql有没有类似的东西。
//补充
事务加悲观锁,不能解决这个问题,比如:
A获取data~~~~~~~~~~~~~~~~~~~~~~~~~~B获取data
|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
A对data操作后,事务加悲观锁保存它~~~~~~B被系统sleep
|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
A结束~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~B被系统继续sleep
|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~B对data操作后,事务加悲观锁保存它,A的修改被覆盖
回复内容:
见http://php.com/manual/zh/memcached.cas.php
memcached的CAS是这么个原理:
首先cas token其实就是一个版本号,
1,我取一条数据时,会顺带返回一个版本号($casToken)给我:
$data = $m->get('ip_block', null, $casToken);
2,然后我修改$data后,再回存这个$data时,我需要靠这个版本号才能存回去:
$m->cas($casToken, 'ip_block', $data);
如果1、2过程之间已经有人存了$data,那么由于版本号$casToken已经发生变化,第2步就会失败。
有了CAS就可以保证数据最新,可以防止对有限的资源争夺时,由于并发缘故,导致的重复问题,比如我还剩1个手机出售,但却被3个人同时下了订单。
求教mysql有没有类似的东西。
//补充
事务加悲观锁,不能解决这个问题,比如:
A获取data~~~~~~~~~~~~~~~~~~~~~~~~~~B获取data
|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
A对data操作后,事务加悲观锁保存它~~~~~~B被系统sleep
|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
A结束~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~B被系统继续sleep
|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~B对data操作后,事务加悲观锁保存它,A的修改被覆盖
事物加悲观锁,即
start transaction
select ... for update // 锁数据
...
update ... // 更新锁住数据的状态
commit
上面是mysql本身的机制,另外也可以采用自己实现的乐观锁,即
数据库增加一个version字段
select ...,verison as last_version form table where condition
...
update table set ...,version=version+1 where condition and version = last_version
至于选择可以参看数据库并发控制 你选乐观锁还是悲观锁?
内容总结
以上是互联网集市为您收集整理的mysql有没有类似和memcached里那样的CAS版本控制?全部内容,希望文章能够帮你解决mysql有没有类似和memcached里那样的CAS版本控制?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。