def inter2(*args,**kwargs): if cachekey is not None: callstr = cachekey else: params = map(lambda xx:repr(xx),args) for (k,v) in kwargs.items(): params.append('%s=%s'%(k,repr(v))) callstr='CALLCACHE::%s(%s)' % (func.func_name,','.join(params)) retobj = redis.get(callstr) if retobj: return json.loads(retobj) retobj = func(*args,**kwargs) rp = redis.pipeline() rp.set(callstr,json.dumps(retobj)).expire(callstr,timeout).execute() return retobj
def ugc_control_set(user_id,obj_type,obj_id,timeout): """ 设置UGC的时间 可以在执行ugc操作之前先过来set 一下,如果返回True则允许下一步 False则因为太频繁不允许ugc """ assert type(user_id) == types.IntType assert type(timeout) == types.IntType q = { 'user_id':user_id, 'obj_type':obj_type, 'obj_id':obj_id } _key = """UGC::%(user_id)s::%(obj_type)s::%(obj_id)s""" % q ret = redis.get(_key) if ret != None: return False else: redis.pipeline().set(_key,'on').expire(_key,timeout).execute() return True