Redis使用列表

36 篇文章 0 订阅

redis是存于内存和磁盘;毕竟存在于内存的东西,对一些必须要求准确的数据当然有所顾虑,但是它对于一些对准确性不是要求非常高的确实非常友好,如页面或者部分数据缓存优化等等。建议学习 Redis基础

使用场景介绍:线下积分第三方接口推送不稳定;结合定时任务处理。有时候有个很蛋疼的事就是第三方的接口调用明明是同一个接口但是有时候返回的数据确实不一样的,具体是第三方在内部调试还是咋地我们不得而知,毕竟第三方也是由程序员在开发的,说不定有时还是同步在开发的情况。别人我们管不了,但是我们可以做“预测”。

上代码:

//正常调用第三方接口:如果第三方不推送加入redis列表中
public function afterSave($insert, $changedAttributes)
    {
        $data = $insert ? json_encode($this->attributes) : json_encode($changedAttributes);
        //推送增加积分(除了erp不推送类型为20)
        $list = json_decode($data,true);
        if ($list['integral'] > 0 && $insert && $list['type'] != 20) {
            //脚本取消订单返还积分、赠送积分放置队列脚本处理
            $is_card_user = User::find()->where(['id' => $list['user_id']])->select('is_card_user')->scalar();
            if ($is_card_user == 1) {
                if (in_array($list['type'], [6, 7, 8, 13])) {
                    \Yii::$app->redis->lpush(CacheKeyEnum::INTEGRAL_QUEUE, $list['id']);
                }else{
                    $v = self::findOne(['id' => $list['id']]);
                    pushIntegrals($list['store_id'], $list['user_id'], $list['integral'], self::getIntegralType($list['type']), self::getIntegralDetail($v));
                }
            }
        }
        $member = new MemberListForm();
        $member->sendWxUpdate($data);
    }

定时任务:

 //定时任务中处理!
public function actionIntegral()
    {
        date_default_timezone_set("PRC");
        $key = CacheKeyEnum::INTEGRAL_QUEUE;
        $redis = \Yii::$app->redis;
        $len = $redis->llen($key);
        for ($i=1; $i<=$len; $i++) {
            $id = $redis->lpop($key);
            $info = Register::findOne(['id' => $id]);
            if (!$info) {
                $redis->lpush($key, $id);
                continue;
            }
            pushIntegrals($info->store_id, $info->user_id, $info->integral, Register::getIntegralType($info->type), Register::getIntegralDetail($info));
            unset($info);
        }
        echo 'success'. "\n";
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值