import redis
from datetime import timedelta


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-bp1mb0v08fqi4hjffu.redis.rds.aliyuncs.com",  # 内网地址
                host="r-bp1mb0v08fqi4hjffupd.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, data):
    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=120, nx=True)
        if not acquire_lock:
            return None

        client.rpush(task, *data)
    return client.lpop(task)

# value = get_data('xiaoniangao', '1234857')
# if value is None:
#     print("Value does not exist")
# else:
#     print(f"Retrieved value: {value}")