使用redis实现分布式锁 给我一段实现代码
时间: 2024-02-29 20:26:38 浏览: 33
以下是使用Redis实现分布式锁的Python代码示例:
```python
import redis
import time
class RedisLock:
def __init__(self, redis_conn, key, timeout=10):
self.redis_conn = redis_conn
self.key = key
self.timeout = timeout
self.value = None
def acquire(self):
start_time = time.time()
while time.time() - start_time < self.timeout:
self.value = str(time.time() + self.timeout + 1)
acquired = self.redis_conn.set(self.key, self.value, px=int(self.timeout*1000), nx=True)
if acquired:
return True
else:
time.sleep(0.1)
return False
def release(self):
if self.redis_conn.get(self.key) == self.value:
self.redis_conn.delete(self.key)
if __name__ == '__main__':
redis_conn = redis.Redis(host='localhost', port=6379, db=0)
lock = RedisLock(redis_conn, 'my_lock')
if lock.acquire():
try:
# 临界区代码
pass
finally:
lock.release()
```
以上代码中,RedisLock类封装了Redis分布式锁的实现。其中,acquire()方法用于获取锁,如果获取锁成功则返回True,否则返回False;release()方法用于释放锁。在临界区代码中,先调用acquire()方法获取锁,若成功则进入临界区,执行完毕后调用release()方法释放锁。