Browse Source

add get_all_data_from_zset

liqian 2 years ago
parent
commit
1298349b21
1 changed files with 27 additions and 5 deletions
  1. 27 5
      db_helper.py

+ 27 - 5
db_helper.py

@@ -87,19 +87,15 @@ class RedisHelper(object):
         conn = self.connect()
         # 数据量大时一次性写入耗时长,分批次写入
         keys_list = list(data.keys())
-        print(len(keys_list))
         zadd_data = {}
         for i, key in enumerate(keys_list):
             if i % 100 == 0:
-                print(i)
                 if zadd_data:
-                    print(f'==={i}')
                     conn.zadd(key_name, zadd_data)
                 zadd_data = {key: data.get(key)}
             else:
                 zadd_data[key] = data.get(key)
         if zadd_data:
-            print(len(zadd_data))
             conn.zadd(key_name, zadd_data)
         # 设置过期时间
         conn.expire(key_name, int(expire_time))
@@ -124,6 +120,29 @@ class RedisHelper(object):
         # else:
         #     return [eval(value) for value in data]
 
+    def get_all_data_from_zset(self, key_name, desc=True, with_scores=False):
+        """
+        获取zset中所有元素的值
+        :param key_name: key
+        :param desc: 分数排序方式,默认从大到小
+        :param with_scores: 是否获取元素的分数,默认 False,只获取元素的值
+        :return: data 元素值列表(不包含分数),value(videoId)类型转换为int, 包含分数时不进行类型转换
+        """
+        conn = self.connect()
+        if not conn.exists(key_name):
+            return None
+        data = []
+        start = 0
+        step = 100
+        while True:
+            end = start + step - 1
+            temp = conn.zrange(key_name, start, end, desc, with_scores)
+            if not temp:
+                break
+            data.extend(temp)
+            start += step
+        return data
+
     def get_score_with_value(self, key_name, value):
         """
         在zset中,根据元素的value获取对应的score
@@ -301,4 +320,7 @@ if __name__ == '__main__':
     # key = 'com.weiqu.video.hot.recommend.item.score.20210901'
     # res = redis_helper.get_score_with_value(key, 90797)
     # print(res)
-    redis_helper.remove_value_from_set(key_name=config_.RELEVANT_TOP_VIDEOS_KEY_NAME, values=(8633849,))
+    # redis_helper.remove_value_from_set(key_name=config_.RELEVANT_TOP_VIDEOS_KEY_NAME, values=(8633849,))
+    data = redis_helper.get_all_data_from_zset(key_name="com.weiqu.video.recall.hot.item.score.20220622", with_scores=True)
+    print(data[:10])
+    print(len(data))