Mysql锁

普通锁
1.使用普通锁保证数据一致性
普通锁使用最多
  (1)操作数据之前,锁住,实施互斥,不允许其他的并发任务操作;
  (2)操作完成后,释放锁,其他任务执行。

2.其他锁
普通锁的问题是太粗暴,锁住后其他任务连‘读任务’也不能并行,相当于执行任务过程是串行的,于是有以下锁
  (1)读-共享锁(Share Locks,记做S锁),读取数据时加S锁,共享锁直接不互斥,读操作可以并行
  (2)写-排他锁(eXclusive Locks,记做X锁),修改时间时加X锁,排他锁和其他锁互斥,记做写操作不能并行。


问题:一旦写操作没有完成,数据不能被其他任务读取,对并发有影响。
即使写任务没有完成,其他读任务也可能并发,这就引出了数据多版本。

3.数据多版本
数据多版本是一种能提高并发能力的方法,原理是
  (1)写任务发生时,将克隆一份,以版本号区分,记做V1版本,原始版本是V0
  (2)写任务操作版本V1直至提交
  (3)并发的读取任务继续操作V0版本的数据,不至于阻塞

总结:
提高并发的思路:

  1. 普通锁:本质是串行执行,所有操作不能并发
  2. 读写锁:实现读的并发
  3. 数据多版本:实现读写并发
posted @ 2019-02-14 20:32  白莲花の  阅读(156)  评论(0编辑  收藏  举报