diff --git a/README.MD b/README.MD index 0f21d47..d4274ff 100644 --- a/README.MD +++ b/README.MD @@ -330,7 +330,7 @@ http://154.8.214.202:5015/interface/prometion ##### 请求示范 -http://154.8.214.202:5015/interface/promotion?name=abc&gameid=1003&locationid=1&ad_title=hello&ad_body=hi world&ad_image=http://1&ad_url=http://2&companyid=2 +http://154.8.214.202:5015/interface/promotion?name=abc&gameid=1003&locationid=1007&ad_title=hello&ad_body=hi world&ad_image=http://1&ad_url=http://2&companyid=2&ad_property={‘is_shake’:1}&jump_status=1 ##### 请求参数说明 diff --git a/ad_tasks.py b/ad_tasks.py new file mode 100644 index 0000000..085db25 --- /dev/null +++ b/ad_tasks.py @@ -0,0 +1,160 @@ +# -*- coding: utf-8 -*- +from myredis.myredis import my_redis +import datetime +from mysql.mmysql import MysqlBase +from config import mysql_promotion_config +from log.mylog import define_logger +import logging +from config import BEGIN, END, ad_list_interface_port +import pdb + +define_logger("/data/logs/ad_tasks.log") +log = logging.getLogger(__name__) + +limit = 10 + + +def send_cache_data(): + mydb = MysqlBase(**mysql_promotion_config) + log.info("start update cache !") + now = datetime.datetime.today().strftime("%Y-%m-%d %H:%M:%S") + all = [] + + get_data_sql = f"""select + a.id, + a.name, + a.ad_num, + a.ad_title, + a.ad_body, + a.ad_image, + a.jump_param, + a.ad_sort, + a.companyid, + a.gameid, + a.channelid, + a.jump_status, + a.ad_property, + b.area, + b.type, + b.mode, + a.locationid + from + (select + id, + name, + ad_num, + ad_title, + ad_body, + ad_image, + jump_param, + ad_sort, + companyid, + gameid, + channelid, + jump_status, + locationid + from + ad + where + status=1 + and in_used=1 + and '{now}'> begin_time + and '{now}' 0: + num = my_redis.get(f"ad::{line['id']}::num") + if not num: + num = 0 + if int(line['ad_num']) > int(num): + my_redis.sadd(key, line['id']) + my_redis.expire(key, 120) + n = int(line['ad_num']) - int(num) + log.info(f"add {line['id']} to {key} ,num was {line['ad_num']},limit was {n}!") + else: + if my_redis.sismember(key, line['id']): + my_redis.srem(key, line['id']) + log.info(f"remove {line['id']} from {key}!") + elif int(line['ad_num']) == 0: + my_redis.sadd(key, line['id']) + my_redis.expire(key, 120) + log.info(f"add {line['id']} to {key} ,num was unlimit !") + else: + log.error(f"get ad_num from mysql failed! ad_num={line['ad_num']}") + + if not my_redis.exists(f"ad::{line['id']}::info"): + # remove some filed from adinfo + remove_list = ('ad_num', 'gameid') + for item in remove_list: + line.pop(item) + my_redis.hmset(f"ad::{line['id']}::info", line) + my_redis.expire(f"ad::{line['id']}::info", 120) + # my_redis.expire(f"ad::{line['id']}::info", 3600 * 24 * 7) + log.info(f"add ad::{line['id']}::info to redis!") + + # 删除过期的数据 + log.info("remove expire data from cache!") + + expire_sql = f"""select + a.id,a.gameid,a.channelid,a.locationid,a.status,b.area + from + (select + id,gameid,channelid,locationid,status + from + ad + where + '{now}'> end_time + or status in (3,4) ) a , + (select + id, + area + from + location) b + where + a.locationid=b.id""" + remove_data = mydb.query(expire_sql) + if remove_data: + for line in remove_data: + try: + id, gameid, channelid, locationid, _, area = line + key = f"ad::{gameid}::{channelid}::{area.split(',')[0].strip()}::{locationid}" + # key = f"{gameid}:{locationid}" + if my_redis.sismember(key, id): + my_redis.srem(key, id) + my_redis.expire(f"ad::{id}::info", 1) + log.info(f"remove {id} from {key} success!") + except Exception: + log.error("拆解过期数据出错!", exc_info=True) + + +if __name__ == "__main__": + log.info('start!') + send_cache_data()