42 lines
1.4 KiB
PHP
42 lines
1.4 KiB
PHP
<?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{}");
|
||
}
|
||
});
|
||
}
|
||
} |