SpringCloud电商秒杀微服务-Redisson分布式锁方案
一、引言: 前两篇文章,介绍了: 《学会Zookeeper分布式锁--让面试官对你刮目相看》 《SpringBoot电商项目实战-Curator分布式锁实现》 细心的读者可能发现,号主在分布式锁这条路上“越走越黑”,已经发表了好几篇相关文章了,莫慌,再学完本章,你就可以在分布式锁场景下拿着倚天剑与屠龙刀叱咤分风云了 因为实际项目可能面临各种业务场景需求,需要不同的分布式锁方案,而这些文章并不是类似网上很多的教你ctrl c + ctrl +v,关键掌握真谛。还不会的建议先去看下第一篇哦,从实际高并发场景深入浅出,层层剖析... 1、分布式锁思路分析 锁特点: 排他性:同一时间,只有一个线程能获得; 阻塞性:其它未抢到的线程阻塞等待,直到锁被释放,再继续抢; 可重入性:线程获得锁后,后续是否可重复获取该锁(避免死锁)。 当然,还要考虑性能开销等问题。 2、常规的分布式锁解决方案有哪几种: 文件系统:同一个目录下,不能存在同名文件 数据库锁:主键 、 唯一约束 、for update 基于Redis的分布式锁:setnx、set、Redisson 基于ZooKeeper的分布式锁:类似文件系统 直接进入今天正题,就不多介绍分布式锁的背景、区别之类了,可以参考前两篇文章哦。 二、redis分布式锁简介 1、基于redis分布式锁 (1)基本锁 原理:利用redis的setnx