并发控制 加乐观锁

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

由于悲观锁在开始读取时即开始锁定,因此在并发访问较大的情况下性能会变差。对MySQL Inodb来说,通过指定明确主键方式查找数据会单行锁定,而查询范围操作或者非主键操作将会锁表。 接下来,我们看一下如何使用乐观锁解决这个问题。

MYSQL

首先我们为counter表增加一列update_time字段,当进行操作时,将先前读取的update_time与当时表中的update_time进行一次对比,如果一致,那么允许操作,然后生成一个新的update_time值替换表中原有的update_time。

Java代码   收藏代码
  1. <?php   
  2. mysqli_query($conn, 'BEGIN');  
  3. $rs = mysqli_query($conn, 'SELECT num, version FROM counter WHERE id = 1');  
  4. mysqli_free_result($rs);  
  5. $row = mysqli_fetch_array($rs);  
  6. $num = $row[0];  
  7. $version = $row[1];//此例:新增version字段标记  
  8. mysqli_query($conn, 'UPDATE counter SET num = ' . $num . ' +1, version = version + 1 WHERE id = 1 AND version = ' . $version);  
  9. $affectRow = mysqli_affected_rows($conn);  
  10. if ($affectRow == 0 || mysqli_errno($conn)) {  
  11.     // 回滚事务重新提交  
  12.     mysqli_query($conn, 'ROLLBACK');  
  13. else {  
  14.     mysqli_query($conn, 'COMMIT');  
  15. }  

PHP文件乐观锁,在处理下单请求的时候,用flock锁定一个文件,如果锁定失败说明有其他订单正在处理,此时要么等待要么直接提示用户"服务器繁忙"

Java代码   收藏代码
  1. <?php  
  2. $fp = fopen("lock.txt""w+");   
  3. if (flock($fp, LOCK_NB | LOCK_EX)) {  
  4.     echo 'do something';  
  5.     @flock($fp, LOCK_UN);  
  6. else {  
  7.     echo '系统繁忙';  
  8. }  
  9. @fclose($fp);  
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
17天前
|
消息中间件 安全 Java
什么是乐观锁、在哪用过乐观锁
什么是乐观锁、在哪用过乐观锁
25 0
|
3月前
|
SQL 数据处理 数据库
乐观锁和悲观锁
乐观锁和悲观锁
36 0
|
5天前
|
安全 Java 关系型数据库
乐观锁与悲观锁
【4月更文挑战第11天】乐观锁与悲观锁
11 3
|
7月前
|
Java API 数据库
什么是乐观锁,什么是悲观锁?
在互联网公司面试中,很多小伙伴都被问到关于锁的理解。今天,我给小伙伴们来聊一聊我对锁的理解,不管我们互斥锁、自旋锁、重入锁、读写锁、行锁、表锁等等等等这些概念,我把他们都归纳为两种类型,乐观锁和悲观锁。
91 0
|
1月前
|
关系型数据库 MySQL 数据库
并发控制
并发控制
17 1
|
2月前
|
关系型数据库 MySQL 数据处理
一文彻底理解乐观锁与悲观锁
一文彻底理解乐观锁与悲观锁
63 0
|
4月前
|
安全 关系型数据库 MySQL
悲观锁和乐观锁
悲观锁和乐观锁
|
9月前
|
NoSQL 算法 Java
乐观锁与悲观锁的实现
本文力求来通俗地讲讲编程中的乐观锁和悲观锁,以及分别是怎么实现的。
64 0
乐观锁与悲观锁的实现
|
10月前
|
数据库
【乐观锁与悲观锁】—— 每天一点小知识
【乐观锁与悲观锁】—— 每天一点小知识
|
10月前
|
关系型数据库 MySQL 数据库