Redis实现的分布式锁的代码
时间: 2024-10-14 20:06:57 浏览: 28
Java基于redis实现分布式锁代码实例
Redis实现分布式锁通常通过两个核心操作来完成:SETNX(原子地设置键值如果不存在则返回true)和expire(为键设置过期时间)。下面是一个简单的Python示例,使用`redis-py`库:
```python
import redis
class DistributedLock:
def __init__(self, lock_key, expire=60):
self.lock_key = lock_key
self.redis_client = redis.Redis(host='your_redis_host', port=your_redis_port, db=your_redis_db)
self.expire = expire
def acquire(self):
if not self.redis_client.setnx(self.lock_key, 'lock'):
return False
else:
self.redis_client.expire(self.lock_key, self.expire)
return True
def release(self):
try:
self.redis_client.delete(self.lock_key)
except redis.exceptions.RedisError:
pass # 锁已被其他进程释放,忽略错误
# 使用示例
lock = DistributedLock('my_lock')
if lock.acquire():
# 执行任务...
lock.release()
else:
print("无法获取锁")
```
在这个例子中,`acquire`方法尝试获取锁(如果键不存在),并设置一个过期时间。`release`方法删除锁定的键以释放锁。如果有多个客户端同时尝试获取同一条锁,只有最先成功设置键的客户端能够获得。
阅读全文