领取优惠券优化目录Contents分布式锁异步领券Lua脚本学习目标LearningObjectives1.理解分布式锁原理和使用场景2.掌握Redisson分布式锁的使用3.能利用MQ解决高并发写问题4.掌握Redis的Lua脚本用法分布式锁01目录Contents集群下锁失效问题简单分布式锁Redisson基于注解的分布式锁多一句没有,少一句不行,用更短时间,教会更实用的技术!高级软件人才培训专家//..//..JVM1集群下锁失效问题线程1线程2线程3synchronized(lock){//..}ObjectMonitor(){//.._owner=;_recursions=0;//...}监视器线程1线程1JVM2synchronized(lock){//..}ObjectMonitor(){//.._owner=;_recursions=0;//...}监视器线程1线程2线程3线程1线程1MySQL锁监视器线程1线程1JVM1-JVM1-分布式锁#当且仅当key不存在时才成功SETNXkeyvalue目录Contents集群下锁失效问题简单分布式锁Redisson基于注解的分布式锁多一句没有,少一句不行,用更短时间,教会更实用的技术!高级软件人才培训专家简单分布式锁实现分布式锁时需要实现的两个基本方法:•获取锁:•互斥:确保只能有一个线程获取锁•非阻塞:尝试一次,成功返回true,失败返回false•释放锁:•手动释放•超时释放:获取锁时添加一个超时时间#添加锁,NX是互斥、EX是设置超时时间SETlockthread1NXEX10#释放锁,删除即可DELlock开始尝试获取锁判断结果nilok获取锁成功执行业务释放锁获取锁失败业务超时或服务宕机自动释放锁#添加锁,利用setnx的互斥特性SETNXlockthread1#添加锁过期时间,避免服务宕机引起的死锁EXPIRElock10目录Contents集群下锁失效问题简单分布式锁Redisson基于注解的分布式锁多一句没有,少一句不行,用更短时间,教会更实用的技术!高级软件人才培训专家RedissonRedis锁线程1线程2线程3获取锁执行业务超时释放锁获取锁OKOK执行业务释放锁阻塞获取锁OK执行业务多一句没有,少一句不行,用更短时间,教会更实用的技术!高级软件人才培训专家Redis锁线程1线程2线程3获取锁超时释放锁获取锁OKOK执行业务释放锁获取锁OK执行业务获取锁标示并判断是否与自己一致NIL释放锁获取锁标示并判断是否与自己一致OKRedisson执行业务阻塞多一句没有,少一句不行,用更短时间,教会更实用的技术!高级软件人才培训专家Redis锁线程1线程2线程3获取锁超时释放锁获取锁OKOK执行业务获取锁OK执行业务获取锁标示并判断是否与自己一致NIL释放锁获取锁标示并判断是否与自己一致OKRedisson执行业务阻塞开...