完成
This commit is contained in:
42
app/process/ExpiredRedis.php
Normal file
42
app/process/ExpiredRedis.php
Normal 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{}");
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user