Browse Source

add limit video distribute count record

liqian 2 years ago
parent
commit
af76b68bb0
3 changed files with 37 additions and 16 deletions
  1. 5 0
      config.py
  2. 15 15
      db_helper.py
  3. 17 1
      recommend.py

+ 5 - 0
config.py

@@ -349,6 +349,11 @@ class BaseConfig(object):
     # 特殊mid对应指定视频列表更新结果存放 redis key 前缀,完整格式:'com.weiqu.video.special.videos.item.{date}'
     KEY_NAME_PREFIX_SPECIAL_VIDEOS = 'com.weiqu.video.special.videos.item.'
 
+    # 限流视频集合存放 redis key前缀,完整格式:'com.weiqu.video.limit.set.{date}'
+    KEY_NAME_PREFIX_LIMIT_VIDEO_SET = 'com.weiqu.video.limit.set.'
+    # 限流视频分发数记录 redis key前缀,完整格式:'com.weiqu.video.limit.distribute.count.{videoId}'
+    KEY_NAME_PREFIX_LIMIT_VIDEO_DISTRIBUTE_COUNT = 'com.weiqu.video.limit.distribute.count.'
+
 
 class DevelopmentConfig(BaseConfig):
     """开发环境配置"""

+ 15 - 15
db_helper.py

@@ -46,7 +46,7 @@ class RedisHelper(object):
         :param key_name: key
         :return: 存在-True, 不存在-False
         """
-        start_time = time.time()
+        # start_time = time.time()
         conn = self.connect()
         res = conn.exists(key_name)
         # if self.params is not None:
@@ -73,7 +73,7 @@ class RedisHelper(object):
         :param key_name: key
         :return: data
         """
-        start_time = time.time()
+        # start_time = time.time()
         conn = self.connect()
         if not conn.exists(key_name):
             # key不存在
@@ -96,7 +96,7 @@ class RedisHelper(object):
         :param expire_time: 过期时间,单位:s,默认1天
         :return: None
         """
-        start_time = time.time()
+        # start_time = time.time()
         conn = self.connect()
         conn.set(key_name, value, ex=int(expire_time))
         # if self.params is not None:
@@ -114,7 +114,7 @@ class RedisHelper(object):
         :param expire_time: 过期时间,单位:s,默认7天,type-int
         :return: None
         """
-        start_time = time.time()
+        # start_time = time.time()
         conn = self.connect()
         conn.zadd(key_name, data)
         # 设置过期时间
@@ -137,7 +137,7 @@ class RedisHelper(object):
         :param with_scores: 是否获取元素的分数,默认 False,只获取元素的值
         :return: data 元素值列表(不包含分数),value(videoId)类型转换为int, 包含分数时不进行类型转换
         """
-        start_time = time.time()
+        # start_time = time.time()
         conn = self.connect()
         if not conn.exists(key_name):
             return None
@@ -191,7 +191,7 @@ class RedisHelper(object):
         :param value: 元素的值
         :return: None
         """
-        start_time = time.time()
+        # start_time = time.time()
         conn = self.connect()
         conn.zrem(key_name, value)
         # if self.params is not None:
@@ -209,7 +209,7 @@ class RedisHelper(object):
         :param value: 元素的值
         :return: idx 位置索引
         """
-        start_time = time.time()
+        # start_time = time.time()
         conn = self.connect()
         res = conn.zrevrank(key_name, value)
         # if self.params is not None:
@@ -227,7 +227,7 @@ class RedisHelper(object):
         :param key_name: key
         :return: data
         """
-        start_time = time.time()
+        # start_time = time.time()
         conn = self.connect()
         if not conn.exists(key_name):
             # key不存在
@@ -258,7 +258,7 @@ class RedisHelper(object):
         :param expire_time: 过期时间,单位:s,默认0.5小时 type-int
         :return: None
         """
-        start_time = time.time()
+        # start_time = time.time()
         conn = self.connect()
         conn.sadd(key_name, *values)
         # 设置过期时间
@@ -278,7 +278,7 @@ class RedisHelper(object):
         :param value: 需判断的元素
         :return: 存在-True, 不存在-False
         """
-        start_time = time.time()
+        # start_time = time.time()
         conn = self.connect()
         res = conn.sismember(key_name, value)
         # if self.params is not None:
@@ -297,7 +297,7 @@ class RedisHelper(object):
         :param values: 元素的值, 类型-tuple
         :return: None
         """
-        start_time = time.time()
+        # start_time = time.time()
         conn = self.connect()
         conn.srem(key_name, *values)
         # if self.params is not None:
@@ -316,7 +316,7 @@ class RedisHelper(object):
         :param expire_time: 过期时间,单位:s,默认0.5小时 type-int
         :return: None
         """
-        start_time = time.time()
+        # start_time = time.time()
         conn = self.connect()
         conn.decr(name=key_name, amount=amount)
         conn.expire(key_name, int(expire_time))
@@ -332,11 +332,11 @@ class RedisHelper(object):
         """
         redis自增
         :param key_name: key
-        :param amount: 自数,默认为1,type-int
+        :param amount: 自数,默认为1,type-int
         :param expire_time: 过期时间,单位:s,默认0.5小时 type-int
         :return: None
         """
-        start_time = time.time()
+        # start_time = time.time()
         conn = self.connect()
         conn.incr(name=key_name, amount=amount)
         conn.expire(key_name, int(expire_time))
@@ -355,7 +355,7 @@ class RedisHelper(object):
         :param value: value
         :return: 过期时间,单位:s,默认5分钟 type-int
         """
-        start_time = time.time()
+        # start_time = time.time()
         conn = self.connect()
         conn.setnx(name=key_name, value=value)
         conn.expire(name=key_name, time=int(expire_time))

+ 17 - 1
recommend.py

@@ -363,11 +363,11 @@ def update_redis_data(result, app_type, mid, last_rov_recall_key, top_K, expire_
     """
     # ####### redis数据刷新
     try:
+        redis_helper = RedisHelper()
         # log_.info('====== update redis')
         if mid and mid != 'null':
             # mid为空时,不做预曝光和定位数据更新
             # 预曝光数据同步刷新到Redis, 过期时间为0.5h
-            redis_helper = RedisHelper()
             preview_key_name = config_.PREVIEW_KEY_PREFIX + '{}.{}'.format(app_type, mid)
             preview_video_ids = [int(item['videoId']) for item in result]
             if preview_video_ids:
@@ -395,6 +395,22 @@ def update_redis_data(result, app_type, mid, last_rov_recall_key, top_K, expire_
                 update_local_distribute_count(flow_recall_video)
                 # log_.info('update local distribute count success!')
 
+        # 限流视频分发数记录
+        if app_type == config_.APP_TYPE['APP']:
+            # APP 不计入
+            return
+        limit_video_id_list = redis_helper.get_data_from_set(
+            key_name=f"{config_.KEY_NAME_PREFIX_LIMIT_VIDEO_SET}{datetime.today().strftime('%Y%m%d')}"
+        )
+        if limit_video_id_list is not None:
+            limit_video_id_list = [int(item) for item in limit_video_id_list]
+            for item in result:
+                video_id = item['videoId']
+                if video_id in limit_video_id_list:
+                    key_name = f"{config_.KEY_NAME_PREFIX_LIMIT_VIDEO_DISTRIBUTE_COUNT}{video_id}"
+                    redis_helper.setnx_key(key_name=key_name, value=0, expire_time=24*2600)
+                    redis_helper.incr_key(key_name=key_name, amount=1, expire_time=24*3600)
+
     except Exception as e:
         log_.error("update redis data fail!")
         log_.error(traceback.format_exc())