Redis는 Pub/Sub(게시/구독) 모델 메시징 메커니즘을 제공합니다. 게시자는 지정된 채널에 메시지를 게시하고 채널을 구독하는 구독자는 메시지를 얻을 수 있습니다. 이 메커니즘을 통해 채팅방, 게시판 등의 기능을 완성할 수 있습니다.
먼저 pub/sub에 관한 몇 가지 명령어를 소개하겠습니다.
채널 메시지 게시
채널 메시지 게시 지정된 채널에 메시지 게시
자동차 친구 그룹이 있고, 이때 사용자가 메시지를 게시했다고 가정해 보세요
127.0.0.1:6379> publish car:fans hello,everyone (integer) 0
반환 값 이 명령의 의미는 사용자가 채널을 구독했다는 것입니다. 채널 구독자 수입니다. 보시다시피 아직 이 채널을 구독한 사람이 없습니다.
메시지 구독
채널 [채널] 구독 구독자는 한 명 이상의 사용자를 구독할 수 있습니다
127.0.0.1:6379> subscribe car:fans Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "car:fans" 3) (integer) 1
이 시점에서 사용자가 자동차 친구 그룹에 가입했습니다. 점차적으로 점점 더 많은 사람들이 그룹에 합류합니다.
사용자가 메시지를 게시하면 다른 그룹 구성원이 해당 메시지를 볼 수 있습니다.
127.0.0.1:6379> publish car:fans 'How are you' (integer) 2127.0.0.1:6379> subscribe car:fans Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "car:fans" 3) (integer) 1 1) "message" 2) "car:fans" 3) "How are you"
참고: 클라이언트가 구독 명령을 실행하면 구독 상태로 들어가며 pub/sub 관련 명령만 실행할 수 있습니다. 또한 이 메커니즘은 메시지를 유지하지 않기 때문에 그룹에 가입하는 새 사용자는 이전 메시지를 볼 수 없습니다. 기능은 제한되어 있지만 충분히 간단합니다.
한 가지 더, 기능이 많을수록 주로 장면에 적합한지 여부에 달려 있습니다. 할 수 있다면 간단할수록 좋습니다.
구독자 수 확인
pubsub numsub [채널...]
그룹의 사용자 수를 확인하고 싶습니다
127.0.0.1:6379> pubsub numsub car:fans 1) "car:fans" 2) (integer) 2
그룹의 사용자는 현재 2명입니다.
Unsubscribe
Unsubscribe [채널 [채널 ...]]
redis-cli UNSUBSCRIBE 1) "unsubscribe" 2) (nil) 3) (integer) 0
실전 전투
위의 지식을 소개한 후 채팅방 기능을 완성할 수 있습니다.
메시지 게시를 위한 의사코드는 매우 간단합니다.
function publist ($chanel, $message) { $redis->publist($channel, $message); }
메시지 가져오기를 위한 의사코드는 다음과 같습니다.
//设置php脚本执行时间 set_time_limit(0); //设置socket连接超时时间 ini_set('default_socket_timeout', -1); //声明频道名称 $channelName = "testpubsub"; try { $redis = new \Redis(); $redis->pconnect('localhost', 6379); $redis->subscribe([$channelName], function ($redis, $channel, $msg) { echo 'channel:' . $channel . ',message:' . $msg . PHP_EOL; }); } catch (\Exception $e) { echo $e->getMessage(); }
여기서 몇 가지 참고할 사항이 있습니다.
소비자는 redis 긴 연결을 생성해야 합니다.
set_time_limit 및 default_socket_timeout을 설정하여 차단된 메시지 획득 프로세스 PHP가 시간 초과되지 않고 소켓 연결 시간이 초과되지 않도록 보장합니다.
현재 Redis는 새로운 스트림을 제공합니다. 훨씬 더 강력한 유형입니다. 관심 있는 친구들이 직접 관련 정보를 확인할 수 있습니다.
위 내용은 Redis를 사용하여 채팅방 기능을 완료하세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!