1.什么是分布式锁
线程锁主要用来给方法,代码加锁。当某个方法或代码使用锁,在同一时刻仅有一个线程执行改方法或改代码段。线程锁只在同一JVM中有效果,因为线程锁的实现在根本上是依靠线程之间共享内存实现的,进程锁是为了控制同一操作系统中多个进程访问某个共享资源,因为进程具有独立性,各个进程访问其他进程的资源,因此无法通过synchronized等线程锁实现进程锁。分布式锁:当多个进程不在同一个系统中,用分布式控制多个进程对资源的访问。
2.分布式锁使用场景
线程间并发问题和进程间并发问题都是可以通过分布式锁解决的,但是强烈不建议这样做,因为采用分布式锁解决这些小问题是非常消耗资源的,分布式锁该用来解决分布式情况下的多线程并发问题。
例如:线程a和线程b都共享某个变量x。如果是单机情况下(单jvm),线程之间共享内存,只要使用线程锁就可以解决并发问题,如果是分布式情况下(多jvm),线程a和线程b很可能不是在同一jvm中,这样线程锁就无法起到作用了,这时候就要用到分布式锁来解决。
3.分布式锁的实现(Redis)
分布式锁实现的关键是在分布式的应用服务器外,搭建一个存储服务器,存储锁信息,这时候我们可以搭建一个Redis服务器,用Redis服务器来存储分布式锁信息。
注意:锁信息必须是会过期超时的,不能让一个线程长期占有一个锁而导致死锁;而且同一时刻只能有一个线程获取到锁。
注:转发自某个人(不记得了)