悲观锁,乐观锁

乐观锁与悲观锁

北京这两天天气不好,时晴时阴,最近有有点累,所以在家里休息了两天,看了一下乐观锁与悲观锁,虽然没有茅塞顿开,但是也有点收获。

先想一想为什么要使用锁?

在用户访问你的网站时,同一时间可能会有多个用户更新相同的记录,这时候他们同时访问数据库,这就会产生冲突,这就是著名的并发(高并发)。

高并发会产生什么后果呢?

丢失更新:一个事务的更新覆盖了其他事务的更新,这就是所谓的更新丢失。列如管理员A把数据库中的2改成了6,管理员B把值从6又改成了2,这个时候,用户A就丢失了他的更新。

脏读 :当一个事务读取其他完成一半事务的记录时,就会发生脏读,列如:管理员AB读取数据库时看到的都是6 ,用户B把值改为2,用户A读取到的值仍是6 .

超卖: 如果maysql中没有锁的存在的话,他会产生超卖的情况,你库存只有十个,但是一百个用户同时去访问你的数据库,这时候就会产生超卖。可能你就会卖出12件商品。

解决高并发的方法:

  • 悲观锁: 假设会发生并发冲突,屏蔽一切可能违反数据完整性的操作, 认为会多人操作同一条数据,因此操作数据时直接把数据锁住,直到一个人操作完成后才会释放锁;上锁期间其他人不能修改数据。
  • 乐观锁: 假设不会发生并发冲突,只在操作时检查是否违反数据完整性,如果别人修改了数据则放弃操作,否则执行操作。而乐观锁不能解决脏读,因为他在操作时才会去检查,而脏读是在操作中产生的。
  • 版本号机制:  MySql最经常使用的乐观锁时进行版本控制,也就是在数据库表中增加一列,记为version,当我们将数据读出时,将版本号一并读出,当数据进行更新时,会对这个版本号进行加1,当我们提交数据时,会判断数据库表中当前的version列值和当时读出的version是否相同,若相同说明没有进行更新的操作,不然,则取消这次的操作

总结::在实际生产环境里边,如果并发量不大且不允许脏读,可以使用悲观锁解决并发问题;但如果系统的并发非常大的话,悲观锁定会带来非常大的性能问题,所以我们就要选择乐观锁定的方法.

转载于:https://www.cnblogs.com/lowbi/p/11022610.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/411139.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

求生之路2浩方联机开始显示服务器,求生之路2怎么联机_求生之路2浩方联机教程_快吧单机游戏...

今天为大家带来《求生之路2》浩方联机教程,和大家分享下求生之路2怎么联机,希望大家游戏愉快!温馨提示:求生之路2最好玩的当然是多人联机进行游戏,目前比较不错的平台为浩方平台,在HF联机最重要的一点是必须…

5位数的数字黑洞是多少_每日一题[491]数字黑洞--Kaprekar常数

定义$\overline{abc}$是一个三位数,其中各数位上的数字$a,b,c\in \{ 0,1,2,3,4,5,6,7,8,9 \}$且不全相同.定义如下运算$f$:把$\overline{abc}$的三个数字$a,b,c$自左到右分别由大到小排列和由小到大排列(若非零数字不足三位则在前面补$0$)&am…

发布博客

使用Word发表博客园博文 Word绑定博客园账号 Step1. 打开Word2016,依次点击"新建" -> "博客文章"。注:如果没有"博客文章"项,可以在模板搜索框进行搜索。 Step2. 进入博客页后,依次点击"…

营业收入的3个数据

1)营收,用于公司公开报表,经过客户确认的营业收入,例如合同额100万,明确4阶段付款,每阶段付款25%,现取得客户确认(盖章)的第一阶段评审通过说明书,则该合同目…

all()是python内置函数吗_Python内置函数all(),python

内置函数 all()1、描述:all() 函数用于判断给定的可迭代参数 iterable 中的所有元素是否都为 True,否则返回 False。元素除了是 0、空、None、False外都算 True。等价于函数:def all(iterable):for element in iterable:if not element:retur…

今天梦幻诛仙服务器维护多久,《梦幻诛仙》6月10日体验服务器维护公告

亲爱的玩家:6月10日《梦幻诛仙》体验服务器将进行停机维护,此次维护我们将会发布更新补丁,版本序号为Ver 1.0.6021。维护时间预计为8:00-10:00点。如遇特殊情况,开机时间将会顺延。请玩家及时更新客户端&am…

10.类的构造(1)

1. 默认情况下,int为“0”;string为空; public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { …

c# mysql app.config_60. C# -- 读取 appconfig文件配置数据库连接的方法

APP.config配置如下:主要是数据库操作:方法一: string _connectionString System.Configuration.ConfigurationManager.ConnectionStrings["strCon"].ToString();方法二: string _connectionSt…

(转)SQL Server:在 SQL Server 2005 中配置数据库邮件,发送邮件

SQL Server:在 SQL Server 2005 中配置数据库邮件,发送邮件 [作/译者]:鹏城万里 [日期]:2008-07-24 [来源]:本站原创 [查看]: 2031 【鹏城万里】 发表于 www.sqlstudy.com SQL Server:在 SQL Ser…

关于2017届学长制作分享软件share(失物招领)的使用体验和需改进的内容

使用体验 1.注册界面 注册界面提示明显,提示用户输入什么类型的密码,而且输入什么样的用户名不限,注册界面色调比较单一,注册内容比较少,而且比较简单,体验感比较好,但注册界面色调和设计全无&a…

编程实现背包的递归和非递归两种解法_算法动态规划(七)背包问题4

⚠️今天继续我们来探讨背包问题中的完全背包问题。完全背包:N个物品,容量为V,每个物品可以无限次使用,求达到V的最值。???今日练习(一)零钱兑换(LeetCode-322)。给定一批硬币coins数组,每个硬币可以不限次数使用&a…

算法与数据结构 (三) 二叉树的简单应用 二叉查找树,二叉堆排序

一 二叉查找树 二叉查找树又叫二叉排序树,是为了解决查找的效率问题。正常情况下查找一个元素,需要O(n)的代价,但是如果查找元素有顺序,有序数组:可以用二分查找降低到 lgn 代价,但…

数据库中索引原理

实际上,您可以把索引理解为一种特殊的目录。微软的SQLSERVER提供了两种索引:聚集索引(clustered index,也称聚类索引、簇集索引)和非聚集索引(nonclustered index,也称非聚类索引、非簇集索引&a…

c++ enum 给定类型_C++11作用域内枚举enum

在C11之前的枚举(enum),是没有办法两个枚举(enum)内有相同枚举名的。如果还不知道C中枚举(enum)是什么,可以看这篇:枚举enum如:苹果和桔子都有大,中,小。写个代码来说明下:两枚举类型中相同枚举…

httpRuntime 问题

httpRuntime是配置asp.net http运行时设置,以确定如何处理对asp.net应用程序的请求。 executionTimeout:表示允许执行请求的最大时间限制,单位为秒 maxRequestLength:指示 ASP.NET 支持的最大文件上载大小。该限制可用于防止因用户将…

linux文件软链接与硬链接

1.命令格式: ln [参数][源文件或目录][目标文件或目录] 软链接只会在你选定的位置上生成一个文件的镜像,不会占用磁盘空间。 2.命令功能: Linux文件系统中,有所谓的链接(link),我们可以将其视为…