下面是一个基于Redis的分布式锁的示例代码,使用Python语言实现:
import redis
import time
class RedisLock:
def __init__(self, redis_client, lock_key, expire_time=10):
self.redis_client = redis_client
self.lock_key = lock_key
self.expire_time = expire_time
def acquire_lock(self):
while True:
# 尝试设置锁的键值对,如果设置成功,则获取锁成功
if self.redis_client.set(self.lock_key, 1, nx=True, ex=self.expire_time):
return True
time.sleep(0.1)
def release_lock(self):
# 释放锁,将锁的键值对删除
self.redis_client.delete(self.lock_key)
在使用分布式锁时,需要创建一个 RedisLock 的实例,并调用 acquire_lock 方法来获取锁,然后执行需要保护的代码块。在代码块执行完成后,需要调用 release_lock 方法来释放锁。
使用示例:
import redis
import time
# 创建 Redis 客户端
redis_client = redis.Redis(host='localhost', port=6379)
# 创建分布式锁实例
lock = RedisLock(redis_client, 'my_lock')
# 获取锁
if lock.acquire_lock():
try:
# 执行需要保护的代码块
print('执行代码块')
time.sleep(2)
finally:
# 释放锁
lock.release_lock()
在上述示例中,先创建了一个 Redis 客户端,然后创建了一个名为 'my_lock' 的分布式锁实例。在获取锁成功后,执行需要保护的代码块,并等待 2 秒钟模拟代码块的执行时间。最后,释放锁。
需要注意的是,expire_time 参数是锁的过期时间,单位为秒。在获取锁时,如果锁已经被其他线程或进程获取,则会进入循环等待锁的阶段。在等待锁的过程中,可以根据实际需求调整等待时间间隔。