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.173.140
4周前thank you !
回复183.219.175.205
9个月前不错
回复