乐观锁,悲观锁,事务
来源:互联网 发布:android安装 mysql 编辑:程序博客网 时间:2024/05/17 03:14
乐观锁,悲观锁,事务
感觉这些东西好基础,好抽象,对不对?还是来和我一起弄明白吧。
悲观锁和乐观锁本是数据库的概念,但是其实DB与应用并没有本质区别,数据库设计所是为了事物,而事物的核心是并发和锁,如今的环境下,哪个系统不需要支持成千上万的并发量,所以一个合格的系统必须支持事物,通常我们所说的事物指的是针对共享数据进行读写的软件事物。
锁是一种作为并发访问共享数据时,保证数据一致性的工具。锁有多种实现方式.根据性质来分锁分为很多种,例如,自旋锁,阻塞锁,读写锁,互斥锁等等.从思想上分)乐观锁和悲观锁.
悲观锁:
悲观锁在操作时很悲观,生怕数据被其他人更新掉,我就先将其先锁住,让别人用不了,我操作完成后再释放掉。
个人理解就是悲观锁对修改数据这件事情持悲观状态,所以他必须要独占数据,让数据修改的过程中只有一个人在操作这个数据(原子操作).
举例:传统型数据库中如表锁,行锁都是操作之前先上锁,都属于悲观锁,又如jdk中synchronized关键字也是悲观锁的一种.
乐观锁:
乐观锁(Optimistic Locking)相对悲观锁而言,乐观锁机制采取了更加宽松的加锁机制.顾名思义就是对待数据是否被更改这件事持乐观态度,每次去查询数据的时候认为数据不会被修改,所以不会上锁,但是在更新的时候会去判断此数据是否被修改,判断的依据就是加在这个数据上面的某个状态,比如版本号,时间戳等,最后发现不行时就回滚。
举例: redis中事务使用了乐观锁,mysql中有mvcc机制也是乐观锁的一种,jdk中各种原子类(cas实现).
总结:
悲观锁需要数据库级别上的的实现,程序中是做不到的,如果在长事务环境中,数据会一直被锁住,导致并发性能大大地降低。而如果使用乐观锁的话,可以间接减少事物的长度,并发度相对高些。
一般来说只有并发量很高,冲突非常严重的系统才需要悲观锁,否则的话就使用乐观锁。如果并发量很高时使用乐观锁的话,会导致很多的并发事务回滚、操作失败。
- 乐观锁,悲观锁,事务
- 事务的乐观锁和悲观锁
- 悲观锁乐观锁
- 乐观锁,悲观锁
- 悲观锁 乐观锁
- 乐观锁 悲观锁
- 悲观锁-乐观锁
- 乐观锁 悲观锁
- 悲观锁,乐观锁
- 悲观锁乐观锁
- 乐观锁 悲观锁
- 悲观锁 乐观锁
- 悲观锁 乐观锁
- 悲观锁乐观锁
- 乐观锁 悲观锁
- 乐观锁悲观锁
- 乐观锁悲观锁
- 乐观锁、悲观锁
- 解决 Mac 下 Android Studio 不打印日志
- hibernate 学习笔记(2)——HQL和高级查询
- 计算机视觉之跟踪算法——KLT点跟踪算法(LK算法))
- Qt应用程序自启动及管理员权限
- angular1 state路由传参/foreach循环
- 乐观锁,悲观锁,事务
- 使用CM 5.3.x安装集群监控服务CMS.mp4
- 遍历文件夹输出版本信息
- ECMAScript6入门简述&索引篇(摘自阮一峰的《ECMAScript 6 入门》)
- android图片上传springMvc
- 自定义手机号码分割样式"188 8888 8888"的EditText
- 实力打脸!2017大量热门行业等着程序员,谁还敢黑程序员?
- 重写FragmentTabHost,避免导航栏切换过程中再次创建内容页面Fragment
- SpringMVC拦截器