Redis 发布订阅

Redis发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。

操作方法

方法名称参数说明备注
pSubscribe$callback, $pattern, …$patterns订阅一个或多个符合给定模式的频道。$callback是回调函数
pubSub$subCommand, …$arguments查看订阅与发布系统状态。
publish$channel, $message将信息发送到指定的频道。
pUnSubscribe$pattern, …$patterns退订所有给定模式的频道。
subscribe$callback, $channel, …$channels订阅给定的一个或多个频道的信息。
unsubscribe$channel, …$channels指退订给定的频道。
setSubscribeStopbool $subscribeStop设置是否退出订阅当你回调函数想退出时,调用这个命令
isSubscribeStop查看当前订阅状态

基本使用

  1. defined("REDIS_HOST") ?: define('REDIS_HOST', '127.0.0.1');
  2. defined("REDIS_PORT") ?: define('REDIS_PORT', 6379);
  3. defined("REDIS_AUTH") ?: define('REDIS_AUTH', 'easyswoole');
  4. go(function () {
  5. $redis = new \EasySwoole\Redis\Redis(new \EasySwoole\Redis\Config\RedisConfig([
  6. 'host' => '127.0.0.1',
  7. 'port' => '6379',
  8. 'auth' => 'easyswoole',
  9. 'serialize' => \EasySwoole\Redis\Config\RedisConfig::SERIALIZE_NONE
  10. ]));;
  11. //新开协程进行订阅
  12. go(function () {
  13. $redis = new \EasySwoole\Redis\Redis(new \EasySwoole\Redis\Config\RedisConfig([
  14. 'host' => REDIS_HOST,
  15. 'port' => REDIS_PORT,
  16. 'auth' => REDIS_AUTH
  17. ]));
  18. $redis->pSubscribe(function (\EasySwoole\Redis\Redis $redis, $pattern, $str) {
  19. var_dump($pattern,$str);
  20. $data = $redis->unsubscribe('test');
  21. var_dump($data);
  22. $redis->setSubscribeStop(true);
  23. }, 'test', 'test1', 'test2');
  24. });
  25. //新开协程进行订阅
  26. go(function () {
  27. $redis = new \EasySwoole\Redis\Redis(new \EasySwoole\Redis\Config\RedisConfig([
  28. 'host' => REDIS_HOST,
  29. 'port' => REDIS_PORT,
  30. 'auth' => REDIS_AUTH
  31. ]));
  32. $redis->subscribe(function (\EasySwoole\Redis\Redis $redis, $pattern, $str) {
  33. var_dump($pattern,$str);
  34. $data = $redis->unsubscribe('test');
  35. var_dump($data);
  36. $redis->setSubscribeStop(true);
  37. }, 'test', 'test1', 'test2');
  38. });
  39. $data = $redis->pubSub('CHANNELS');
  40. var_dump($data);
  41. \Swoole\Coroutine::sleep(1);
  42. $data = $redis->publish('test2', 'test');
  43. var_dump($data);
  44. $data = $redis->pUnSubscribe('test');
  45. var_dump($data);
  46. });