Redis队列

Yii2 使用redis实现简单的队列封装方法

Yii2 使用redis实现简单的队列封装方法,相对于MQ之类的简单很多

首先我们先实现推入方法:

public function setList($post,$redis)
{

    //        $post= [
    //            'prefix' => 'list_tags:',
    //            'list_name' => 'list_long_tags',
    //            'key_id' => 1,  //主键
    //            'type_id' => 1, //其他参数
    //            //..... 可以添加更多参数
    //        ];

    $noArr = ['prefix', 'list_name', 'key_id'];
    $newArr = [];

    foreach ($post as $key => $item) {
        if (!in_array($key, $noArr)) {
            $newArr[$key] = $item;
        }
    }
    
    $error = 0;
    $yesNum = 0;
    foreach ($post['key_id'] as $key => $val) {
        $newArr['key_id'] = $val;
        //设置过滤验证
        if (!$redis->get($post['prefix'] . $val)) {
            $yesNum += 1;
            $redis->set($post['prefix'] . $val, $val);
            $redis->lpush($post['list_name'], json_encode($newArr, JSON_UNESCAPED_UNICODE));
        } else {
            $error += 1;
        }
    }
    return [$yesNum, $error];
}

然后是获取的方法:

public function getList($data, $size = 200)
{
        //        $data = [
        //            'prefix' => 'list_keywords_',
        //            'list_name' => 'list_long_keywords',
        //        ];
        
        $redis = Yii::$app->redis;
        //获取当前队列长度
        $length = $redis->llen($data['list_name']);
        if ($length == 0) {
            return [-1, '没有关键词了!'];
        }
        $arr = [];
        for ($i = 0; $i < $size; $i++) {
            try {
                $record = $redis->rpop($data['list_name']);
                if (!empty($record)) {
                    $res = json_decode($record, true);
//                    $redis->setex($data['prefix'] . $res['key_id'], 60 * 60 * 24, $record);
                    //处理业务逻辑
                    $arr[] = $res;
                } else {
                    exit('没有数据了!');
                }
            } catch (\Throwable $e) {
                continue;
            }
        }
        return [1, $arr];
    }





留言簿


(c) 2024 OYYM - 赣ICP备17008861号-1

欧阳裕民个人博客