分布式锁至少需要满足以下两点:
- 多进程可见
- 互斥(锁可释放)
(1)首先Redis本身就是独立于JVM之外的,因此满足多进程可见。
(2)使用Redis的setnx命令,可使锁互斥,然后使用del命令可主动释放锁,如果服务宕机,使用expire命令设置锁过期时间,可在宕机时自动释放锁。为确保原子性,可使用一条命令:set key value nx ex 10.
其中nx表示如果不存在,则设置key。ex 10表示key在10秒后过期。
(1)首先Redis本身就是独立于JVM之外的,因此满足多进程可见。
(2)使用Redis的setnx命令,可使锁互斥,然后使用del命令可主动释放锁,如果服务宕机,使用expire命令设置锁过期时间,可在宕机时自动释放锁。为确保原子性,可使用一条命令:set key value nx ex 10.
其中nx表示如果不存在,则设置key。ex 10表示key在10秒后过期。