thinkphp继承高级model后的乐观锁运用(测试中)
<?php
class IndexAction extends Action {
private $d_user;
private $user;
private $arr; public function __construct(){
parent::__construct();
$this->d_user = D('User');
$this->user = M('user'); //打款的配置信息
$this->arr = array(
'userA' => 1,
'userB' => 2,
'money' => 300
);
} /**
* 打款逻辑(事务操作)
*/
public function index(){
$this->user->startTrans();
$this->moneyFill($this->user, $this->arr['userA'], $this->arr['money']); $data = array('id' => $this->arr['userA'], 'money' => array('exp','money - ' . $this->arr['money']));
$data2 = array('id' => $this->arr['userB'], 'money' => array('exp','money + ' . $this->arr['money'])); if($data = $this->d_user->lockTable($data)){
$res = $this->user->save($data);
}
if($data2 = $this->d_user->lockTable($data2)){
$res2 = $this->user->save($data2);
} if($res && $res2){
$this->user->commit();
echo 'commit';
}else {
$this->user->rollback();
echo 'rollback';
}
} /**
* 支出方金钱是否满足
*/
private function moneyFill($user, $id, $money){
$current_money = $user->where(array('id' => $id))->getField('money');
if($current_money < $money){
echo 'money no worth!';
exit;
}
}
}
<?php
/**
* 用户表模型类
*/
class UserModel extends AdvModel{ /**
* 乐观锁操作
*/
public function lockTable($res){ //记录乐观锁
$res = $this->recordLockVersion($res); //缓存当前线程的乐观锁
$this->cacheLockVersion($res); //检查乐观锁并返回是否锁定
return $this->checkLockVersion($res, $options);
}
}
?>
thinkphp继承高级model后的乐观锁运用(测试中)的更多相关文章
- 多线程深入:乐观锁与悲观锁以及乐观锁的一种实现方式-CAS(转)
原文:https://www.cnblogs.com/qjjazry/p/6581568.html 首先介绍一些乐观锁与悲观锁: 悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每 ...
- Java并发问题--乐观锁与悲观锁以及乐观锁的一种实现方式-CAS
首先介绍一些乐观锁与悲观锁: 悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁.传统的关系型数据库里边就用到了很 ...
- 乐观锁与悲观锁以及乐观锁的一种实现方式-CAS
首先介绍一些乐观锁与悲观锁: 悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁.传统的关系型数据库里边就用到了很 ...
- 乐观锁和悲观锁及CAS实现
乐观锁与悲观锁 悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁.传统的关系型数据库里边就用到了很多这种锁机制, ...
- [数据库事务与锁]详解八:底理解数据库事务乐观锁的一种实现方式——CAS
注明: 本文转载自http://www.hollischuang.com/archives/1537 在深入理解乐观锁与悲观锁一文中我们介绍过锁.本文在这篇文章的基础上,深入分析一下乐观锁的实现机制, ...
- innodb 悲观锁,乐观锁
转 http://www.cnblogs.com/chenwenbiao/archive/2012/06/06/2537508.html CREATE TABLE `products` ( `id` ...
- Hibernate解决高并发问题之:悲观锁 VS 乐观锁
高并发问题是程序设计所必须要解决的问题,解决此类问题最主要的途径就是对对程序进行加锁控制.hibernate对加锁机制同样做出了实现,常用加锁方式为悲观锁和乐观锁.悲观锁指的是对数据被外界(包括本系统 ...
- SQL Server 锁机制 悲观锁 乐观锁 实测解析
先引入一些概念,直接Copy其他Blogs中的,我就不单独写了. 一.为什么会有锁 多个用户同时对数据库的并发操作时会带来以下数据不一致的问题: 1.丢失更新 A,B两个用户读同一数据并进行修改,其中 ...
- [数据库锁机制] 深入理解乐观锁、悲观锁以及CAS乐观锁的实现机制原理分析
前言: 在并发访问情况下,可能会出现脏读.不可重复读和幻读等读现象,为了应对这些问题,主流数据库都提供了锁机制,并引入了事务隔离级别的概念.数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务 ...
随机推荐
- 【C语言】练习1-20
题目来源:<The C programming language>中的习题 练习1-20:编写程序detab,将输入中的制表符替换成适当数目的空格,使空格充满到下一个制表符终止的地方. 思 ...
- nginx无法启动异常
Nginx安装过程中可能会报如下错误: /usr/local/nginx/sbin/nginx -t /usr/local/nginx/sbin/nginx: error while loading ...
- error nr.1045 access denied for user 'root'@'localhost' (using passwd:no)
在windows上卸载了mysql,再次重新安装的时候运行失败,并报以下错误: 解决办法: 1.服务里面停止Mysql服务. 2.卸载Mysql,删除MySQL的安装目录. 3.此外还要删除以下目录的 ...
- WinForm DataGridView新增加行
1.不显示最下面的新行 通常 DataGridView 的最下面一行是用户新追加的行(行头显示 * ).如果不想让用户新追加行即不想显示该新行,可以将 DataGridView 对象的 Allow ...
- python pandas replace函数
在处理数据的时候,很多时候会遇到批量替换的情况,如果一个一个去修改效率过低,也容易出错.replace()是很好的方法. 1.基本结构: df.replace(to_replace, value) 前 ...
- python标准库介绍——35 pipes 模块详解
==pipes 模块== (只用于 Unix) ``pipes`` 模块提供了 "转换管道 (conversion pipelines)" 的支持. 你可以创建包含许多外部工具调用 ...
- WEB服务器搭建–IIS
功能作用 IIS是一个World Wide Web server.Gopher server和FTP server全部包容在里面. IIS意味着你能发布网页,并且有ASP(Active Server ...
- 批量修改Mysql数据库表Innodb为MyISAN
mysql -uroot -e "SELECT concat('ALTER TABLE ', TABLE_NAME,' ENGINE=MYISAM;') FROM Information_s ...
- Atitti opencv2.4 实现的人脸检测 attilax总结
Atitti opencv2.4 实现的人脸检测 attilax总结 1.1. 1.OpenCV人脸检测的方法1 1.2. /atiplat_img/src/com/attilax/facedetec ...
- iOS安全攻防(十八):数据保护API
数据保护API 题外话 开篇先扯几句题外话,许多朋友都问我怎么不写防啊,我确实有点犹豫.hackers总是想象如果自己是开发者会怎么写,然后才能找到入手点.同理,开发者们也要想象自己是hackers会 ...