redis.py 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import redis
  2. from common import Material
  3. class SyncRedisHelper:
  4. _pool: redis.ConnectionPool = None
  5. _instance = None
  6. def __init__(self):
  7. if not self._instance:
  8. self._pool = self._get_pool()
  9. self._instance = self
  10. def _get_pool(self) -> redis.ConnectionPool:
  11. if self._pool is None:
  12. self._pool = redis.ConnectionPool(
  13. # host="r-bp1mb0v08fqi4hjffupd.redis.rds.aliyuncs.com", # 外网地址
  14. host="r-bp1mb0v08fqi4hjffu.redis.rds.aliyuncs.com", # 内网地址
  15. port=6379,
  16. db=0,
  17. password="Wqsd@2019",
  18. # password="Qingqu2019",
  19. )
  20. return self._pool
  21. def get_client(self) -> redis.Redis:
  22. pool = self._get_pool()
  23. client = redis.Redis(connection_pool=pool)
  24. return client
  25. def close(self):
  26. if self._pool:
  27. self._pool.disconnect(inuse_connections=True)
  28. def get_data(name, feishu_id, feishu_sheet):
  29. task = f"task:{name}"
  30. lock = f"lock:{name}"
  31. helper = SyncRedisHelper()
  32. client = helper.get_client()
  33. if not client.exists(task):
  34. acquire_lock = client.set(lock, 1, ex=60, nx=True)
  35. if not acquire_lock:
  36. return None
  37. if name == 'dy-pl-gjc' or name == 'ks-pl-gjc' or name == 'sph-pl-gjc':
  38. data = Material.get_keyword_data(feishu_id, feishu_sheet)
  39. elif name == 'dy-plzh-1' or name == 'dy-plzh' or name == 'sph-plzh'or name == 'ks-plzh':
  40. data = Material.get_pl_task_data(feishu_id, feishu_sheet)
  41. else:
  42. data = Material.get_task_data(feishu_id, feishu_sheet)
  43. client.rpush(task, *data)
  44. ret = client.lpop(task)
  45. # if name == 'dy-pl-gjc' or name == 'dd-sp' or name == 'ks-pl-gjc' or name == 'sph-pl-gjc':
  46. # client.rpush(task, ret)
  47. return ret
  48. """搜索计数插入"""
  49. def increment_key(mark_count):
  50. helper = SyncRedisHelper()
  51. client = helper.get_client()
  52. client.incrby(mark_count, 1)
  53. """搜索计数获取"""
  54. def get_first_value_with_prefix(mark_count):
  55. helper = SyncRedisHelper()
  56. client = helper.get_client()
  57. value = client.get(mark_count)
  58. return int(value) if value is not None else 1
  59. def del_dyss_redis_key(mark_count):
  60. helper = SyncRedisHelper()
  61. client = helper.get_client()
  62. client.delete(mark_count)
  63. def get_redis_video_data(video_id):
  64. lock = f"video_lock:{video_id}"
  65. helper = SyncRedisHelper()
  66. client = helper.get_client()
  67. acquire_lock = client.set(lock, 1, ex=600, nx=True)
  68. if not acquire_lock:
  69. return True
  70. return False