redis 分布式锁demo
时间: 2024-01-14 21:01:06 浏览: 93
redis实现分布式锁
Redis 分布式锁是一种在分布式环境下使用 Redis 实现的锁定机制,可以避免多个客户端同时修改共享资源而导致数据不一致的情况。下面是一个简单的 Redis 分布式锁的代码示例:
```python
import redis
import time
# 连接 Redis 数据库
r = redis.StrictRedis(host='localhost', port=6379, db=0)
# 加锁函数
def acquire_lock(lockname, acquire_timeout=10, lock_timeout=10):
identifier = str(time.time())
end = time.time() + acquire_timeout
while time.time() < end:
if r.setnx(lockname, identifier):
r.expire(lockname, lock_timeout)
return identifier
return False
# 释放锁函数
def release_lock(lockname, identifier):
pipe = r.pipeline(True)
while True:
try:
pipe.watch(lockname)
if pipe.get(lockname) == identifier:
pipe.multi()
pipe.delete(lockname)
pipe.execute()
return True
pipe.unwatch()
break
except redis.exceptions.WatchError:
pass
return False
# 使用分布式锁
def demo():
lockname = "mylock"
identifier = acquire_lock(lockname)
if not identifier:
print("无法获取锁")
return
print("成功获取锁")
# 在此进行需要加锁的操作
release_lock(lockname, identifier)
print("释放锁成功")
demo()
```
以上代码示例中,首先连接 Redis 数据库,然后定义了获取锁和释放锁的两个函数。在使用分布式锁的示例中,先调用 `acquire_lock` 获取锁,成功获取锁之后进行需要加锁的操作,完成操作后调用 `release_lock` 释放锁。这样可以保证在多个客户端同时请求锁时,只有一个客户端能够成功获取锁,从而避免了数据的并发修改问题。
阅读全文