⼀ 、应⽤场景
在多线程并发的场景下 ,Java Synchronized/Reentrantlock 锁能够实现同⼀个JVM进程内多线程 并发的安全性 ,但⽆法保证多个JVM进程实例构成的集群环境在多线程下的安全性。在⼀些业务场景 下需要引⼊分布式锁。
1、缓存击穿
当某个热点缓存数据过期时 ,如果此时有⼤量并发请求访问这个数据 ,这些请求将直接穿透缓存访问 后端数据库。
在缓存失效的瞬间 ,使⽤分布式锁来保证只有⼀个线程去访问数据库 ,其它线程等待该线程从数据库 中加载数据并更新缓存后再获取。避免⼤量请求同时访问数据库。
2、分布式定时任务
分布式集群下的定时任务⼀般是多实例部署的 ,很多业务场景⽐如:商品定时上架、定时⽣成数据 报表等要求在执⾏时机到来时只允许⼀个实例执⾏任务。 因此 ,执⾏定时任务时需要考虑抢锁来争夺 定时任务执⾏权。