初始化项目

This commit is contained in:
2026-09-01 22:15:50 +08:00
commit b5a26a8848
11217 changed files with 1710987 additions and 0 deletions
@@ -0,0 +1,63 @@
<?php
namespace app\common\service;
use Predis\Client as RedisClient;
class QueueService
{
protected $redis;
public function __construct()
{
$this->redis = new RedisClient([
'host' => '127.0.0.1',
'port' => 6379,
// 'password' => '', // 如果有密码
]);
}
// 推送消息到队列
public function push($queueName, $message)
{
$this->redis->rpush($queueName, json_encode($message));
}
// 从队列中取出消息
public function pop($queueName)
{
$message = $this->redis->lpop($queueName);
return $message ? json_decode($message, true) : null;
}
/**
* 延迟推送(ZSET)
* @param string $queueName
* @param array|string $data
* @param int $delay 延迟秒数
*/
public function laterPush($queueName, $data, $delay)
{
$score = time() + $delay;
$payload = is_string($data) ? $data : json_encode($data, JSON_UNESCAPED_UNICODE);
return $this->redis->zadd($queueName . ':delayed', [$payload => $score]);
}
/**
* 检查延迟队列,将到期任务迁移到普通队列
* @param string $queueName
*/
public function migrateDelayedToReady($queueName)
{
$now = time();
// 获取到期任务
$tasks = $this->redis->zrangebyscore($queueName . ':delayed', 0, $now);
if (!empty($tasks)) {
foreach ($tasks as $task) {
// 放回普通队列
$this->push($queueName, $task);
// 从延迟队列中移除
$this->redis->zrem($queueName . ':delayed', $task);
}
}
}
}