设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 创业者 手机 数据
当前位置: 首页 > 站长学院 > PHP教程 > 正文

深入理解Yii2.0乐观锁与悲观锁的原理与使用(3)

发布时间:2021-02-18 11:01 所属栏目:121 来源:网络整理
导读:在具体使用方法上,可以参照以下代码: // 修改前要尝试加锁 class SectionController extends Controller { public function actionUpdate($id) { $model = $this-findModel($id); if ($model-load(Yii::$app-reque

在具体使用方法上,可以参照以下代码:

// 修改前要尝试加锁
class SectionController extends Controller {
public function actionUpdate($id)
{
$model = $this->findModel($id);

if ($model->load(Yii::$app->request->post()) && $model->save()) {
  return $this->redirect(['view','id' => $model->id]);
} else {
  // 加入一个加锁的判断
  if (!$model->lock()) {
    // 加锁失败
    // ... ...
  }
  return $this->render('update',[
    'model' => $model,]);
}

}
}

上述方法实现的悲观锁,避免了使用数据库自身的锁机制,契合Web应用的特点, 具有一定的适用性,但是也存在一定的缺陷:

  1. 最长允许锁定时长会带来一定的副作用。时间定得长了,可能要等很长时间, 才能重新编辑非正常解锁的记录。时间定得短了,则经常退化成乐观锁。
  2. 时间戳精度问题。如果精度不够,那么在加锁时,与我们讨论过的乐观锁失效存, 在同样的漏洞。
  3. 这种形式的锁定,只是应用层面的锁定,并非数据库层面的锁定。 如果存在应用之外对于数据库的写入操作。这个锁定机制是无效的。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。

(编辑:ASP站长网)

网友评论
推荐文章
    热点阅读