1.什么是redis分布式锁
Redis分布式锁是一种利用Redis实现的锁机制,用于在分布式系统中保护共享资源的访问。它利用Redis的原子性操作和过期时间设置来实现互斥访问。
在分布式环境中,多个进程或线程可能同时访问共享资源,如果没有合适的机制来保护共享资源,就会导致数据不一致或竞争条件的发生。Redis分布式锁通过在Redis中设置一个唯一的锁标识来确保在同一时间只有一个进程或线程可以获取到锁,其他进程或线程则需要等待。
2.如何实现?
lock_name = 'my_lock'
process_id = os.getpid()
redis_cli = RedisUtils().client
# 获取锁 def acquire_lock(lock_name, acquire_timeout=10, lock_timeout=600): end_time = time.time() + acquire_timeout while time.time() < end_time: if redis_cli.set(lock_name, process_id, ex=lock_timeout, nx=True): return True time.sleep(0.001) return False # 释放锁 def release_lock(lock_name):
if redis_cli.get(lock_name) == process_id:
redis_cli.delete(lock_name)
注意点:
- 锁过期(设置较长的过期时间)
- 释放了别人的锁(加入当前线程唯一的识别)