进度接口-->进度引擎

前段时间工作中遇到一个问题,需要提供给前端一个进度信息展示的接口,一直的思路是将信息数据放redis中,当每次请求的时候从redis中取出来,更新后再放回redis中,并且将此次的数据返回给前端。但是有一个问题推翻了这种思路,当数据量过大时、或者获取某一数据耗时过长时,前端会间隔几秒就来请求接口,但是数据来不及返回,前端就会报错。

进度引擎

为解决上述问题,提出进度引擎方案。进度引擎需要实现的功能是:需要监听信号,当接收到start信号后,开始从redis中lrange获取列表中相应键的值信息,然后请求数据进行填充,当数据填充结束后lset / rpush进去更新redis中原有的数据信息即可。当接收到stop、restart、pause、resume等信号时,采取相应的措施即可。
给前端提供数据的接口每次只用去获取redis中的数据信息即可。
这样避免了在一个接口中既要请求数据又要返回数据,还常常因为数据量大、返回速度慢等原因造成的报错问题。
	
	从redis中获取list类型的键值信息接口:
    def load_plan_id(p_id):   ####planState_
        #msg = redis_strict.lpop("planState_"+str(p_id))#在"planState_"+str(p_id)对应列表的左侧获取第一个元素并在列表中删除 返回值是第一个元素
        msg = redis_strict.lrange("planState_"+str(p_id),0,0)  #在"planState_"+str(p_id)
        #print 'lrange 获取的msg结果展示:',msg
        if msg:
            try:
                c_p = json.loads(msg[0])
                return c_p
            except:
                return {}
        else:
            return {}

    向redis中更新list类型的键值信息接口:
   	 def push_plan_id(p_id,new_p):
   	    msg = json.dumps(new_p)
        msg1 = redis_strict.lrange("planState_"+str(p_id),0,0)
        if msg1:
            flg = redis_strict.lset("planState_"+str(p_id),0,msg)
        else:
            flg = redis_strict.rpush("planState_"+str(p_id),msg)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值