MySQL锁和分布式锁

MySQL锁分类:

1.按属性:

        共享锁:也叫读锁,允许其他事务访问,但只能对数据读不能写

        排他锁:只能自己对数据进行读写,其他事务不能读写。

2.按机制:

        乐观锁:提交前认为不会发生线程并发问题,再提交时对数据检查发现问题进行加锁的一种思想。

        悲观锁:总是认为会出现线程并发问题导致数据不安全进行加锁。

3.按粒度:行锁、表锁、间隙锁、页锁、记录锁、临键锁

分布式锁:

 为什么要使用分布式锁:

        1.在单进程系统中,多个线程访问一个数据进行同步操作产生的并发问题。

                解决:在java中可以通过synchronize和lock等手段来实现。

        2.在分布式环境中,其他多个进程可以通过线程访问数据造成并发。

                有哪些锁:可重入锁(避免死锁)、阻塞锁、公平锁

        3.分布式锁的解决方案:

                数据库:通过设置主键和唯一索引加锁判断,最后释放保存

                redis:通过setnx+ex实现,修改锁的状态以及过期时间。               

                Redission的看门狗:对锁进行监听是否过期,过期进行续期。

                zookeeper:1.临时节点+重试:先执行的线程在zookeeper中创建一个临时节点,获取到这个锁,其他线程要等待第一个线程执行完成释放第二个才能获取锁。

                                      2.临时顺序节点+重试:第一个节点先获取到锁,下一个节点监听上一个节点,等待上一个完成释放后,删除第一个节点,第二个节点取代第一个节点执行以此类推。

        MySQL锁和分布式锁_第1张图片

 

        

你可能感兴趣的:(java,开发语言)