Go 两数相除
1年前
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]; }
留言簿
183.219.175.205
3个月前不错
回复