This commit is contained in:
2025-10-16 19:04:48 +08:00
parent b470bf90db
commit 3fb7712f29
6 changed files with 127 additions and 80 deletions

View File

@@ -0,0 +1,42 @@
<?php
namespace app\process;
use support\Log;
use Webman\RedisQueue\Redis;
use Workerman\Redis\Client;
// 消息推送
class ExpiredRedis
{
public function onWorkerStart()
{
$resis_host = config('redis.default.host');
$resis_port = config('redis.default.port');
$resis_pwd= config('redis.default.password');
$redis = new Client('redis://' .$resis_host. ':' . $resis_port);
// 如果Redis需要密码认证
$redis->auth($resis_pwd);
// 选择数据库默认0
$redis->select(0);
// 设置读取超时(-1表示不超时
$redis->setOption(\Redis::OPT_READ_TIMEOUT, -1);
// 订阅键过期事件频道
// __keyevent@0__:expired 表示监听0号数据库的键过期事件
$redis->psubscribe(['__keyevent@0__:expired'], function ($pattern, $channel, $key) use($redis){
// 这里可以添加你的业务逻辑
// 例如根据键名前缀处理不同业务
$str = 'expired:sms:';
if (strpos($key, $str) === 0) {
Log::info ("替换之前: " . $key);
$id = str_replace($str, '', $key);
Log::info ("替换过的ID: " . $id);
// 发给队列
Redis::send('send.mark.sms', '1,' . $id);
Log::info ("处理订单过期: {$id}\n{}");
}
});
}
}