• 锁:分布式锁、数据库锁


    一、分布式锁

    1、分布式锁应该是怎样的:

    (1)互斥性:分布式部署的应用集群中,一个方法只能被一台机器上 的一个线程执行

    (2)这把锁要是可重入的,避免死锁

    (3)有高可用的获取锁和释放锁功能,性能要好

    2、分布式锁的三种方式:

    (1)基于数据库实现分布式锁

    有悲观锁、乐观锁。

    悲观锁实现方式是独占数据,其他线程等待,不会出现修改冲突,对于数据敏感且读取频率低的场景用

    乐观锁通过增加递增的版本号字段实现。乐观锁认为数据一般不冲突,只有在提交更新时才会检测冲突,适用于读取频率高而修改少的场景

    (2)基于缓存(redis等)实现分布式锁

    Jedis.set(key,value,nxxx,expx,time)

    (3)基于zookeeper实现分布式锁

    客户端对某个方法加锁是,在zk上与该方法对应的指定节点的目录下生成唯一的瞬时有序节点,判断是否获取锁只需要判断有序节点中序号最小的一个

    释放锁时删除瞬时节点

    二、数据库锁级别

    1、行级锁:特点与表锁刚好相反

    Record locks 记录锁,对索引项加锁

    Gap lock 间隙锁,锁定一个范围,不包含记录本身:select c1 from t1 where c1 between 10 and 20 for update

    Next-key 锁是记录锁+间隙锁,锁定一个范围且锁定记录本身

    2、表级锁:锁整张表,开销小,加锁快,不会出现死锁,锁粒度大,发生锁冲突概率最高

    3、三级封锁协议

    一级:修改数据加x排他锁直到事务结束才释放

    二级:在一级基础上,事务读数据之前先加s锁,读完释放s锁(防止丢失修改且防止读'脏'数据),不能保证可重复读

    三级:在二级基础上,事务读数据前加s锁,直到事务结束才释放锁,解决可重复读问题;

  • 相关阅读:
    Egret的第三方库制作,以及在大型项目中的应用
    阿里云申请免费https证书 + IIS服务器安装
    Android事件处理的2种方式:监听器与回调
    Android工具类-关于网络、状态的工具类
    Android下Notification,样式style,主题theme的功能实现
    静态工厂模式 理解
    Android下的联网下载的操作
    Android启动Activity的标准Action和标准Category
    Android RGB颜色查询对照表
    Android颜色值(RGB)所支持的四种常见形式
  • 原文地址:https://www.cnblogs.com/blackdd/p/16166324.html
Copyright © 2020-2023  润新知