Redis 發(fā)布訂閱
Redis發(fā)布訂閱(pub/sub)是一種消息通信模式:發(fā)送者(pub)發(fā)送消息,訂閱者(sub)接收消息。
操作方法
方法名稱 | 參數(shù) | 說明 | 備注 | |
---|---|---|---|---|
pSubscribe | $callback, $pattern, ...$patterns | 訂閱一個或多個符合給定模式的頻道。 | $callback是回調(diào)函數(shù) | |
pubSub | $subCommand, ...$arguments | 查看訂閱與發(fā)布系統(tǒng)狀態(tài)。 | ||
publish | $channel, $message | 將信息發(fā)送到指定的頻道。 | ||
pUnSubscribe | $pattern, ...$patterns | 退訂所有給定模式的頻道。 | ||
subscribe | $callback, $channel, ...$channels | 訂閱給定的一個或多個頻道的信息。 | ||
unsubscribe | $channel, ...$channels | 指退訂給定的頻道。 | ||
setSubscribeStop | bool $subscribeStop | 設(shè)置是否退出訂閱 | 當(dāng)你回調(diào)函數(shù)想退出時,調(diào)用這個命令 | |
isSubscribeStop | 查看當(dāng)前訂閱狀態(tài) |
基本使用
defined("REDIS_HOST") ?: define('REDIS_HOST', '127.0.0.1');
defined("REDIS_PORT") ?: define('REDIS_PORT', 6379);
defined("REDIS_AUTH") ?: define('REDIS_AUTH', 'easyswoole');
go(function () {
$redis = new \EasySwoole\Redis\Redis(new \EasySwoole\Redis\Config\RedisConfig([
'host' => '127.0.0.1',
'port' => '6379',
'auth' => 'easyswoole',
'serialize' => \EasySwoole\Redis\Config\RedisConfig::SERIALIZE_NONE
]));;
//新開協(xié)程進(jìn)行訂閱
go(function () {
$redis = new \EasySwoole\Redis\Redis(new \EasySwoole\Redis\Config\RedisConfig([
'host' => REDIS_HOST,
'port' => REDIS_PORT,
'auth' => REDIS_AUTH
]));
$redis->pSubscribe(function (\EasySwoole\Redis\Redis $redis, $pattern, $str) {
var_dump($pattern,$str);
$data = $redis->unsubscribe('test');
var_dump($data);
$redis->setSubscribeStop(true);
}, 'test', 'test1', 'test2');
});
//新開協(xié)程進(jìn)行訂閱
go(function () {
$redis = new \EasySwoole\Redis\Redis(new \EasySwoole\Redis\Config\RedisConfig([
'host' => REDIS_HOST,
'port' => REDIS_PORT,
'auth' => REDIS_AUTH
]));
$redis->subscribe(function (\EasySwoole\Redis\Redis $redis, $pattern, $str) {
var_dump($pattern,$str);
$data = $redis->unsubscribe('test');
var_dump($data);
$redis->setSubscribeStop(true);
}, 'test', 'test1', 'test2');
});
$data = $redis->pubSub('CHANNELS');
var_dump($data);
\Swoole\Coroutine::sleep(1);
$data = $redis->publish('test2', 'test');
var_dump($data);
$data = $redis->pUnSubscribe('test');
var_dump($data);
});