import redis from common import Material class SyncRedisHelper: _pool: redis.ConnectionPool = None _instance = None def __init__(self): if not self._instance: self._pool = self._get_pool() self._instance = self def _get_pool(self) -> redis.ConnectionPool: if self._pool is None: self._pool = redis.ConnectionPool( # host="r-bp1mb0v08fqi4hjffupd.redis.rds.aliyuncs.com", # 外网地址 host="r-bp1mb0v08fqi4hjffu.redis.rds.aliyuncs.com", # 内网地址 port=6379, db=0, password="Wqsd@2019", # password="Qingqu2019", ) return self._pool def get_client(self) -> redis.Redis: pool = self._get_pool() client = redis.Redis(connection_pool=pool) return client def close(self): if self._pool: self._pool.disconnect(inuse_connections=True) def get_data(name, feishu_id, feishu_sheet): task = f"task:{name}" lock = f"lock:{name}" helper = SyncRedisHelper() client = helper.get_client() if not client.exists(task): acquire_lock = client.set(lock, 1, ex=60, nx=True) if not acquire_lock: return None if name == 'dy-pl-gjc' or name == 'ks-pl-gjc' or name == 'sph-pl-gjc': data = Material.get_keyword_data(feishu_id, feishu_sheet) elif name == 'dy-plzh-1' or name == 'dy-plzh' or name == 'sph-plzh'or name == 'ks-plzh': data = Material.get_pl_task_data(feishu_id, feishu_sheet) else: data = Material.get_task_data(feishu_id, feishu_sheet) client.rpush(task, *data) ret = client.lpop(task) # if name == 'dy-pl-gjc' or name == 'dd-sp' or name == 'ks-pl-gjc' or name == 'sph-pl-gjc': # client.rpush(task, ret) return ret """搜索计数插入""" def increment_key(mark_count): helper = SyncRedisHelper() client = helper.get_client() client.incrby(mark_count, 1) """搜索计数获取""" def get_first_value_with_prefix(mark_count): helper = SyncRedisHelper() client = helper.get_client() value = client.get(mark_count) return int(value) if value is not None else 1 def del_dyss_redis_key(mark_count): helper = SyncRedisHelper() client = helper.get_client() client.delete(mark_count) def get_redis_video_data(video_id): lock = f"video_lock:{video_id}" helper = SyncRedisHelper() client = helper.get_client() acquire_lock = client.set(lock, 1, ex=600, nx=True) if not acquire_lock: return True return False