redis.py 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import redis
  2. class SyncRedisHelper:
  3. _pool: redis.ConnectionPool = None
  4. _instance = None
  5. def __init__(self):
  6. if not self._instance:
  7. self._pool = self._get_pool()
  8. self._instance = self
  9. def _get_pool(self) -> redis.ConnectionPool:
  10. if self._pool is None:
  11. self._pool = redis.ConnectionPool(
  12. # host="r-bp1mb0v08fqi4hjffupd.redis.rds.aliyuncs.com", # 外网地址
  13. host="r-bp1mb0v08fqi4hjffu.redis.rds.aliyuncs.com", # 内网地址
  14. port=6379,
  15. db=0,
  16. password="Wqsd@2019",
  17. # password="Qingqu2019",
  18. )
  19. return self._pool
  20. def get_client(self) -> redis.Redis:
  21. pool = self._get_pool()
  22. client = redis.Redis(connection_pool=pool)
  23. return client
  24. def close(self):
  25. if self._pool:
  26. self._pool.disconnect(inuse_connections=True)
  27. def get_data(name, data):
  28. task = f"task:{name}"
  29. lock = f"lock:{name}"
  30. helper = SyncRedisHelper()
  31. client = helper.get_client()
  32. if not client.exists(task):
  33. acquire_lock = client.set(lock, 1, ex=120, nx=True)
  34. if not acquire_lock:
  35. return None
  36. client.rpush(task, *data)
  37. return client.lpop(task)
  38. def get_redis_video_data(video_id):
  39. lock = f"video_lock:{video_id}"
  40. helper = SyncRedisHelper()
  41. client = helper.get_client()
  42. acquire_lock = client.set(lock, 1, ex=600, nx=True)
  43. if not acquire_lock:
  44. return True
  45. return False