实现redis分布式锁及原理
单体架构 中 synchronized 只是本地锁,锁的也只是当前jvm下的对象,在分布式场景下,要用分布式锁。
1.在高并发场景多个用户访问服务器,在redis那里同时会接收到多个请求,这个时候就需要在访问服务的redis那里加个锁就可以了,多个服务器谁拿到锁,哪个服务就执行,其他服务就进行等待直到获取锁。
服务器1要去访问redis,那么他会在redis中通过"setnx key value" 操作设置一个key 进去,value是啥不重要,重要的是要有一个key,也就是一个标记,而且这个key你爱叫啥叫啥,只要所有的服务器设置的key相同就可以。
那么我们可以看到会返回一个1,那就代表了成功。如果再来一个请求去设置同样的key这个时候会返回0,那就代表失败了。
那么我们就可以通过这个操作去判断是不是当前可以拿到锁,或者说可以去访问redis,如果返回