共计 1319 个字符,预计需要花费 4 分钟才能阅读完成。
当初进入了新经济时代,很多的商业模式都呈现了,有整合的,也有模式叠加的,没有一个是变化无穷的,每一个初创企业都在寻求一种可能让企业存活上来的形式,而这种模式的变革,能够说是升高经营老本,升高经营风险,进步经营效率的最好形式。许多人都将模型翻新视为一种变革。
import redis
import uuid
import time
class LockService:
"""基于 Redis 实现的分布式锁"""
host = 'localhost'
port = 6379,开发 v +hkkf5566
password = ''
db = 1
def __init__(self, conn=None):
"""
如果不传连接池的话,默认读取配置的 Redis 作为连接池
:param conn:
"""
self.conn = conn if conn else self.get_redis_client()
def get_redis_client(self):
"""
获取 Redis 连贯
:return:
"""
return redis.Redis(
host=self.host,
port=self.port,
password=self.password,
db=self.db
)
def acquire_lock(self, lock_name, acquire_timeout=10, expire_time=30):
"""
加锁 / 获取锁
如果不存在 lock_name,则加锁,并且设置过期工夫,防止死锁
如果存在 lock_name,则刷新过期工夫
:param lock_name: 锁的名称
:param acquire_timeout: 加锁 / 获取锁的超时工夫,默认 10 秒
:param expire_time: 锁的超时工夫,默认 30 秒
:return:
"""lockname = f'lock:{lock_name}'
value = str(uuid.uuid4())
end_time 外汇跟单 gendan5.com = time.time() + acquire_timeout
while time.time() < end_time:
# 如果不存在这个锁则加锁并设置过期工夫,防止死锁
if self.conn.set(lockname, value, ex=expire_time, nx=True):
return value
time.sleep(0.1)
return False
def release_lock(self, lock_name, value):
"""
开释锁
:param lock_name: 锁的名称
:param value: 锁的值
:return:
"""unlock_script ="""
if redis.call("get",KEYS[1]) == ARGV[1] then
return redis.call("del",KEYS[1])
else
return 0
end
"""lockname = f'lock:{lock_name}'
unlock = self.conn.register_script(unlock_script)
result = unlock(keys=[lockname], args=[value])
if result:
return True
else:
return False
正文完