• 分布式锁与redisson


    Redisson

    官网
    代码

    redisson提供了基于redis的强大封装
    redisson主要问题也就是“Redis分布式锁最大问题”

    支持使用的分布式对象:Topic。布隆过滤器Boom Filter。AtomicLong。。。
    分布式集合:Map…
    分布式锁(Lock)和同步器(Synchronizer): CountDownLatch…
    分布式服务: Scheduler Service

    分布式锁

    追求强一致性:使用Zookeeper
    追求性能:选择Redis,推荐Redisson
    Redis分布式锁最大问题在于:主从模式/集群模式下,master节点宕机,节点数据同步不及时造成数据丢失

    创建锁:锁名和UUID,锁失效时间
    获取锁:线程尝试获取锁时间
    释放锁:在finally中释放锁,使用UUID确定释放同一把锁

    Redis2.6.12=-
    创建锁:setnx lockname uuid;expire lockname 10;两个命令,使用lua脚本保证原子性
    获取锁:setnx 不存在才能够设置成功
    释放锁:在finally中操作;get lockname 获取uuid,判断是不是同1个uuid;再 del lockname;两个命令,使用lua脚本保证原子性

    Redis2.6.12=+
    创建锁:SET lockname uuid EX 10 NX
    获取锁:SET操作成功后,返回的是OK,失败返回NIL
    释放锁:在finally中操作;get lockname 获取uuid,判断是不是同1个uuid;再 del lockname;两个命令,使用lua脚本保证原子性

    EX seconds:设置键的过期时间为second秒
    PX millisecounds:设置键的过期时间为millisecounds 毫秒
    NX:只在键不存在的时候,才对键进行设置操作
    XX:只在键已经存在的时候,才对键进行设置操作
    SET操作成功后,返回的是OK,失败返回NIL

    问题:为什么要使用uuid

    那个线程加的锁,那个线程自己释放。
    锁有自己的超时时间,超过这个时间,锁会自己释放。
    当A线程的执行时间超过锁自己释放的时间,B线程可获取锁,A刚好执行完则释放了B加的锁
    
    • 1
    • 2
    • 3

    问题:锁超时时间的设置,设置为多少合适
    []

    操作:
    加锁成功》启动一个守护线程》每隔1/3的锁超时时间就去延长锁的超时时间。例如,锁超时时间设置为3秒,就是每隔1秒就去延长锁的超时时间,重设为3秒》业务代码执行完成,关闭守护线程
    	
    注意:
    同于释放锁需要判断uuid,否则无论谁加锁守护线程都会重新设置锁的超时时间
    守护线程在合理的时间去设置锁的超时时间
    加锁的线程处理完业务后应及时销毁守护进程
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    问题:redis不同部署方式的问题

    单机:单点故障
    数据同步:解决,zookeeper,保证强一致性
    - Master-Slave + Sentinel(哨兵)选举模式:master故障,数据未同步到新slave中
    - Redis Cluster(集群)模式:master故障,数据未同步到新slave中
    
    • 1
    • 2
    • 3
    • 4
  • 相关阅读:
    印尼禁令频出,Shopee该站也停止销售跨境商品
    java-python-net-php-基于SSM的汽车保险销售信息管理系统计算机毕业设计程序
    狗都能看懂的Pytorch MAML代码详解
    京东数据报告:2023年常温奶消费市场数据分析
    win10下使用virtualbox + vagrant配置ruby开发机环境
    Idea之常用插件
    二叉树 | 代码随想录学习笔记
    Sui基金会宣布将从外部做市商处收回1.17亿枚SUI,以支持生态和社区发展
    python调用外部exe程序 等待程序执行完后后 往下运行 直接往下运行
    C# Math.Round()四舍五入、四舍六入五成双
  • 原文地址:https://blog.csdn.net/baidu_35805755/article/details/127929636