def update_auto_qa_message_cache(**kwargs): if hasattr(cache, 'request'): if hasattr(cache.request.user_profile, 'webapp_id'): webapp_id = cache.request.user_profile.webapp_id key = 'auto_qa_message_webapp_id_%s_*' % (webapp_id) cache_util.delete_pattern(key)
def api_post(request): """ 响应POST """ data = request_util.get_fields_to_be_save(request) data = add_extra_data(data, request.POST) update_data = {} update_fields = set([ 'name', 'start_time', 'end_time', 'allow_repeat', 'expend', 'delivery', 'delivery_setting', 'limitation', 'chance', 'type', 'prize' ]) for key, value in data.items(): if key in update_fields: update_data['set__' + key] = value app_models.Egg.objects(id=request.POST['id']).update(**update_data) #更新后清除缓存 # cache_key = 'apps_egg_%s_noprizecount' % request.POST['id'] # delete_cache(cache_key) cache_key = "apps_egg_%s_*" % request.POST['id'] delete_pattern(cache_key) response = create_response(200) return response.get_response()
def update_webapp_product_detail_cache_when_update_model_property_value( **kwargs): if hasattr(cache, 'request'): if hasattr(cache.request, 'user'): owner_id = cache.request.user.id key = 'webapp_product_detail_{wo:%s}_{pid:*}' % (owner_id) cache_util.delete_pattern(key) # key = 'webapp_products_categories_{wo:%s' % (owner_id) # cache_util.delete_pattern(key) update_product_list_cache(owner_id)
def update_webapp_product_pool_cache(**kwargs): """ 更新商品详情缓存 """ if hasattr(cache, 'request') and cache.request.user_profile: webapp_owner_id = cache.request.user_profile.user_id product_ids = None pattern = 'webapp_product_detail_{wo:%s}_*' % webapp_owner_id cache_util.delete_pattern(pattern) # pattern_categories = "webapp_products_categories_{wo:%s}" % webapp_owner_id # cache_util.delete_pattern(pattern_categories) update_product_list_cache(webapp_owner_id)
def update_webapp_product_detail_by_review_cache(**kwargs): if hasattr(cache, 'request'): webapp_owner_id = cache.request.user_profile.user_id instance = kwargs.get('instance', None) if instance: if isinstance(instance, mall_models.ProductReview): product_id = instance.product_id else: product_id = instance[0].product_id key = 'p_r_{id:%s}' % product_id cache_util.delete_pattern(key) update_product_cache(webapp_owner_id, product_id)
def update_webapp_product_detail_cache(**kwargs): """ 更新商品详情缓存 """ if hasattr(cache, 'request') and cache.request.user_profile: webapp_owner_id = cache.request.user_profile.user_id product_ids = None cache_args = kwargs.get('cache_args', None) if cache_args: product_ids = cache_args.get('ids', []) if product_ids and len(product_ids) > 0: for product_id in product_ids: update_product_cache(webapp_owner_id, product_id) # 微众商城代码 # 更新微众商城缓存 # TODO 更好的设计微众商城 # if webapp_owner_id != 216: # key = 'webapp_product_detail_{wo:216}_{pid:%s}' % (product_id) # cache_util.delete_cache(key) # 微众商城代码 # if webapp_owner_id != 216: # cache_util.delete_cache('webapp_products_categories_{wo:216}') else: pattern = 'webapp_product_detail_{wo:%s}_*' % webapp_owner_id cache_util.delete_pattern(pattern) # pattern_categories = "webapp_products_categories_{wo:%s}" % webapp_owner_id # cache_util.delete_pattern(pattern_categories) update_product_list_cache(webapp_owner_id) instance = kwargs.get('instance', None) if instance: if isinstance(instance, mall_models.Product): product_id = instance.id else: product_id = instance[0].id # 会有一次多余删除 todo update_product_cache(webapp_owner_id, product_id, deleteRedis=False)
def update_webapp_owner_info_cache_with_login(instance, **kwargs): if isinstance(instance, account_models.UserProfile): webapp_owner_id = instance.user_id elif isinstance(instance, AccountHasWeizoomCardPermissions): webapp_owner_id = instance.owner_id else: if cache.request.user_profile: webapp_owner_id = cache.request.user_profile.user_id else: return key = 'webapp_owner_info_{wo:%s}' % webapp_owner_id cache_util.delete_cache(key) key_termite_page = 'termite_webapp_page_%s_*' % webapp_owner_id cache_util.delete_pattern(key_termite_page) get_webapp_owner_info(webapp_owner_id) try: from termite2.tasks import purge_webapp_page_from_varnish_cache purge_webapp_page_from_varnish_cache.delay(webapp_owner_id) except: pass
def handle(self, *args, **options): """ @param args: None: 清空所有以apps_开头的redis缓存 args[0]: 清空所有以apps_args[0]_开头的redis缓存 args[1]: 清空所有以apps_args[0]_args[1]_开头的redis缓存 注:签到的缓存key用的是weapp_owner_id, 其他活动用的是主表的id @param options: @return: """ print 'clear apps redis cache start...' l = len(args) if l == 1: apps_name = args[0] patten = "apps_%s_*" % apps_name delete_pattern(patten) print 'delete all cache those match patten', patten elif l == 2: apps_name = args[0] apps_id = args[1] patten = "apps_%s_%s*" % (apps_name, apps_id) delete_pattern(patten) print 'delete all cache those match patten', patten else: patten = "apps_*" delete_pattern(patten) print 'delete all apps cache' print 'clear apps redis cache end...'
def update_webapp_product_cache(**kwargs): if hasattr(cache, 'request') and cache.request.user_profile: webapp_owner_id = cache.request.user_profile.user_id instance = kwargs.get('instance', None) before_instance = kwargs.get('before_instance', None) sender = kwargs.get('sender', None) if instance and sender == mall_models.Product: if isinstance(instance, mall_models.Product): product_id = instance.id shelve_type = instance.shelve_type is_deleted = instance.is_deleted # 微众商城代码 # weshop_status = instance.weshop_status # weshop_sync = instance.weshop_sync else: product_id = instance[0].id shelve_type = instance[0].shelve_type is_deleted = instance[0].is_deleted # 微众商城代码 # weshop_status = instance[0].weshop_status # weshop_sync = instance[0].weshop_sync if before_instance: # 微众商城代码 #微众商城下架处理 duhao 20151120 # if before_instance.weshop_status != weshop_status and mall_models.PRODUCT_SHELVE_TYPE_OFF == weshop_status: # cache_util.rem_set_member_by_patten_from_redis('{wo:216}_{co:*}_products',product_id) if before_instance.shelve_type != shelve_type and mall_models.PRODUCT_SHELVE_TYPE_OFF == shelve_type or is_deleted == True: #下架商品,清除redis中{wo:38}_{co:*}_products的数据项,批量更新 # 或者删除商品时 categories_products_key = '{wo:%s}_{co:*}_products' % ( webapp_owner_id) cache_util.rem_set_member_by_patten_from_redis( categories_products_key, product_id) # 微众商城代码 # if weshop_sync > 0: # #微众商城的缓存也要一起更新 duhao 20151120 # cache_util.rem_set_member_by_patten_from_redis('{wo:216}_{co:*}_products',product_id) elif before_instance.shelve_type != shelve_type and mall_models.PRODUCT_SHELVE_TYPE_ON == shelve_type: # 微众商城代码 # elif (before_instance.shelve_type != shelve_type or webapp_owner_id == 216) and mall_models.PRODUCT_SHELVE_TYPE_ON == shelve_type: #上架商品,确定该商品原来是否有category category_has_products = mall_models.CategoryHasProduct.objects.filter( product_id=product_id) if category_has_products: for category_has_pro in category_has_products: categories_products_key = '{wo:%s}_{co:%s}_products' % ( webapp_owner_id, category_has_pro.category.id) cache_util.add_set_to_redis( categories_products_key, category_has_pro.product_id) categories_products_key = '{wo:%s}_{co:0}_products' % ( webapp_owner_id) cache_util.delete_cache(categories_products_key) #todo zhaolei # cache_util.add_set_to_redis(categories_products_key,product_id) update_product_cache(webapp_owner_id, product_id) elif instance and sender == mall_models.CategoryHasProduct: # 商品分组中更新商品时 if isinstance(instance, mall_models.CategoryHasProduct): catory_id = instance.category_id product_id = instance.product_id else: catory_id = instance[0].category_id product_id = instance[0].product_id product = mall_models.Product.objects.filter(id=product_id).get() # 非待售添加 if product.shelve_type != mall_models.PRODUCT_SHELVE_TYPE_OFF: # 微众商城代码 # if product.shelve_type != mall_models.PRODUCT_SHELVE_TYPE_OFF and (webapp_owner_id != 216 or \ # (webapp_owner_id == 216 and product.weshop_status != mall_models.PRODUCT_SHELVE_TYPE_OFF)): #如果是微众商城过来的请求,则需要验证微众商城里的在售状态 duhao 20151120 # if product.shelve_type != mall_models.PRODUCT_SHELVE_TYPE_OFF: categories_products_key = '{wo:%s}_{co:%s}_products' % ( webapp_owner_id, catory_id) # todo zhaolei 会存在多次删除的情况 cache_util.delete_cache(categories_products_key) # todo zhaolei 清除对应的varnish缓存,需要重构 # if settings.EN_VARNISH: # if not settings.DEBUG: # url = 'http://%s/termite/workbench/jqm/preview/?woid=%s&module=mall&model=products&action=list&category_id=%s' % \ # (settings.DOMAIN, webapp_owner_id, catory_id) # request = urllib2.Request(url) # request.get_method = lambda: 'PURGE' # urllib2.urlopen(request) elif instance and sender == mall_models.ProductCategory: categories_key = '{wo:%s}_categories' % (webapp_owner_id) cache_util.delete_cache(categories_key) elif instance and sender == mall_models.ProductModel: if isinstance(instance, mall_models.ProductModel): #暂不处理 pass else: for ins in instance: product_id = ins.product_id key = 'webapp_product_detail_{wo:%s}_{pid:%s}' % ( webapp_owner_id, product_id) cache_util.delete_pattern(key) # pattern_categories = "webapp_products_categories_{wo:%s}" % webapp_owner_id # cache_util.delete_pattern(pattern_categories) update_product_list_cache(webapp_owner_id) key_termite_page = 'termite_webapp_page_%s_*' % webapp_owner_id cache_util.delete_pattern(key_termite_page) try: from termite2.tasks import purge_webapp_page_from_varnish_cache purge_webapp_page_from_varnish_cache.delay(webapp_owner_id) except: pass
def delete_all_webapp_page_cache(webapp_owner_id): key_termite_page = 'termite_webapp_page_%s_*' % webapp_owner_id cache_util.delete_pattern(key_termite_page) purge_webapp_page_from_varnish_cache.delay(webapp_owner_id)
def api_post(request): """ 保存(更新)模板项目 """ project_id = request.POST['id'] field = request.POST['field'] if field == 'page_content_from_zip': if not Project.import_from_zip_file(request): response = create_response(501) response.errMsg = u'导入page失败' return response.get_response() elif field == 'page_content': project_id = request.GET.get('project_id', '') if project_id.startswith('fake:'): _, project_type, webapp_owner_id, page_id, mongodb_id = project_id.split( ':') pagestore = pagestore_manager.get_pagestore_by_type('mongo') page_component = json.loads(request.POST['page_json']) if mongodb_id == 'new': page_component['is_new_created'] = True real_project_id = 'fake:%s:%s:%s' % (project_type, webapp_owner_id, page_id) pagestore.save_page(real_project_id, page_id, page_component) if mongodb_id == 'new': page = pagestore.get_page(real_project_id, page_id) result_project_id = 'fake:%s:%s:%s:%s' % ( project_type, webapp_owner_id, page_id, str( page['_id'])) else: result_project_id = project_id response = create_response(200) response.data = result_project_id Project.delete_all_webapp_page_cache(webapp_owner_id) return response.get_response() if project_id.startswith('new_app:'): if project_id.endswith(':0'): project_id = Project.create_empty_app_page(request) response = create_response(200) response.data = {'project_id': project_id} Project.delete_all_webapp_page_cache(request.manager.id) return response.get_response() else: Project.update_app_page_content(request) else: Project.update_page_content(request) #清除webapp page cache # Project.delete_webapp_page_cache(request.manager.id, project_id) elif field == 'is_enable': webapp_models.Project.objects.filter(id=project_id).update( is_enable=True) else: if field[0] == '[': fields = json.loads(field) values = json.loads(request.POST['value']) options = dict(zip(fields, values)) else: value = request.POST['value'] options = {field: value} webapp_models.Project.objects.filter(id=project_id).update( **options) key_termite_page = 'termite_webapp_page_%s_*' % request.manager.id cache_util.delete_pattern(key_termite_page) purge_webapp_page_from_varnish_cache.delay(request.manager.id) response = create_response(200) return response.get_response()
def delete_member_cache(openid, webapp_id): today = datetime.today() date_str = datetime.today().strftime('%Y-%m-%d') key = 'member_{webapp:%s}_{openid:%s}' % (webapp_id, openid) cache_util.delete_pattern(key)