mysql有没有类似和memcached里那样的CAS版本控制?
Jun 06, 2016 pm 08:33 PM
见http://php.net/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的修改被覆盖
回复内容:
见http://php.net/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的修改被覆盖
事物加悲观锁,即
<code>start transaction select ... for update // 锁数据 ... update ... // 更新锁住数据的状态 commit </code>
上面是mysql本身的机制,另外也可以采用自己实现的乐观锁,即
数据库增加一个version字段
<code>select ...,verison as last_version form table where condition ... update table set ...,version=version+1 where condition and version = last_version </code>
至于选择可以参看数据库并发控制 你选乐观锁还是悲观锁?

Artikel Panas

Alat panas Tag

Artikel Panas

Tag artikel panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian

Bagaimana untuk membetulkan ralat mysql_native_password tidak dimuatkan pada MySQL 8.4
