RedisDB.py 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. # -*- coding: utf-8 -*-
  2. """
  3. Created on 2024-02-27
  4. ---------
  5. @summary: redis 去重
  6. ---------
  7. @author: Lzz
  8. """
  9. import sys
  10. import os
  11. sys.path.append(os.path.dirname(os.getcwd()))
  12. import redis
  13. from utils.tools import get_sha256
  14. class RedisFilter():
  15. redis_db = None
  16. def __init__(self, redis_url='redis://:k5ZJR5KV4q7DRZ92DQ@172.17.189.142:7361/2', expire_time=None):
  17. # redis_url='redis://:k5ZJR5KV4q7DRZ92DQ@172.17.162.28:8361/0',
  18. self.__class__.redis_db = redis.StrictRedis.from_url(redis_url) # 单机
  19. self._ex = expire_time or 86400 * 365 * 1 # 1年 = 86400 * 365 * 1
  20. def __repr__(self):
  21. return "<RedisFilter: {}>".format(self.redis_db)
  22. def exists(self, key):
  23. """全量检索"""
  24. if self.redis_db.exists(key) > 0:
  25. return True
  26. return False
  27. def add(self, keys, *args, **kwargs):
  28. """
  29. 添加数据 删除数据:redis_db.delete("pylist_" + key)
  30. @param keys: 检查关键词在 redis 中是否存在,支持列表批量
  31. @return: list / 单个值(如果数据已存在 返回 False 否则返回 True, 可以理解为是否添加成功)
  32. """
  33. is_list = isinstance(keys, list)
  34. keys = keys if is_list else [keys]
  35. is_added = []
  36. for key in keys:
  37. if not self.exists(key):
  38. is_added.append(self.redis_db.set(key, 1, ex=self._ex))
  39. else:
  40. is_added.append(False)
  41. return is_added if is_list else is_added[0]
  42. def get(self, keys):
  43. """
  44. 检查数据是否存在
  45. @param keys: list / 单个值
  46. @return: list / 单个值 (存在返回True 不存在返回False)
  47. """
  48. is_list = isinstance(keys, list)
  49. keys = keys if is_list else [keys]
  50. is_exist = []
  51. for key in keys:
  52. is_exist.append(self.exists(key))
  53. # 判断数据本身是否重复
  54. temp_set = set()
  55. for i, key in enumerate(keys):
  56. if key in temp_set:
  57. is_exist[i] = True
  58. else:
  59. temp_set.add(key)
  60. return is_exist if is_list else is_exist[0]
  61. def data_filter(self, data):
  62. data = [data] if not isinstance(data, list) else data
  63. args = sorted(data)
  64. pykey = "pylist_" + get_sha256(*args)
  65. if self.get(pykey):
  66. ''' 存在 '''
  67. return True
  68. else:
  69. ''' 不存在 '''
  70. return False
  71. def data_save_redis(self, data):
  72. data = [data] if not isinstance(data, list) else data
  73. args = sorted(data)
  74. pykey = "pylist_" + get_sha256(*args)
  75. state = self.add(pykey)
  76. return state