分布式锁业务场景代码实现
时间: 2023-07-17 14:06:41 浏览: 92
下面是一个简单的示例代码,演示了如何使用Redis分布式锁来实现防止重复操作的业务场景:
```python
import redis
import time
# 创建Redis连接
redis_client = redis.Redis(host='localhost', port=6379, db=0)
def process_request(request_id):
# 尝试获取锁
lock_acquired = redis_client.setnx('lock:my_lock', request_id)
if lock_acquired:
try:
# 设置锁的过期时间,防止死锁
redis_client.expire('lock:my_lock', 60)
# 执行业务逻辑
print(f"Processing request {request_id}...")
time.sleep(5) # 模拟业务处理时间
finally:
# 释放锁
redis_client.delete('lock:my_lock')
else:
# 请求被拒绝,已经有其他请求在处理
print(f"Request {request_id} is already being processed.")
# 模拟多个请求同时到达的情况
requests = ['request1', 'request2', 'request3']
for request_id in requests:
process_request(request_id)
```
在上面的代码中,我们使用Redis的`setnx`命令来尝试获取锁。如果成功获取到锁,则执行业务逻辑,并在最后释放锁;如果获取锁失败,则表示已经有其他请求正在处理,可以根据需求进行相应的处理(例如返回错误信息或重试等)。
需要注意的是,在设置锁的过期时间时,可以根据业务需求来设置合适的值。同时,要确保在最后释放锁时,无论业务逻辑是否成功执行,都能正确释放锁,避免出现死锁的情况。
阅读全文