Redis可以使用SETNX(SET if Not eXists)命令实现并发锁。以下是一个使用Redis实现并发锁的示例代码:
import redisimport timedef acquire_lock(redis_conn, lock_name, acquire_timeout=10, lock_timeout=10):"""获取锁"""end_time = time.time() + acquire_timeoutwhile time.time() < end_time:if redis_conn.set(lock_name, "locked", nx=True, ex=lock_timeout):return Truetime.sleep(0.001)return Falsedef release_lock(redis_conn, lock_name):"""释放锁"""redis_conn.delete(lock_name)# 创建Redis连接redis_conn = redis.Redis(host='localhost', port=6379, db=0)# 获取锁if acquire_lock(redis_conn, "my_lock"):print("获取锁成功")# 执行需要加锁的操作# ...# 释放锁release_lock(redis_conn, "my_lock")else:print("获取锁失败,其他线程正在使用锁")在上述代码中,acquire_lock函数会尝试获取锁,若成功获取到锁,则返回True;若在指定的acquire_timeout时间内未能获取到锁,则返回False。
release_lock函数用于释放锁,即删除锁对应的key。
需要注意的是,为了防止锁的过期时间设置得过长导致死锁,建议在使用完锁后手动调用release_lock函数释放锁,而不要依赖锁的自动过期。

