Redis fournit un mécanisme de messagerie de modèle Pub/Sub (publication/abonnement). L'éditeur publie des messages sur la chaîne spécifiée et les abonnés abonnés à la chaîne peuvent obtenir les messages. Grâce à ce mécanisme, nous pouvons compléter des fonctions telles que les forums de discussion et les tableaux d'affichage.
Tout d'abord, introduisons quelques commandes concernant pub/sub.
Publier un message
Publier un message de chaînePublier un message sur la chaîne spécifiée
Supposons qu'il y ait est un groupe d'amis de voiture, à ce moment un utilisateur a posté un message
127.0.0.1:6379> publish car:fans hello,everyone (integer) 0
La valeur de retour de cette commande est le nombre d'abonnés qui se sont abonnés à cette chaîne. Comme vous pouvez le constater, personne n'est encore abonné à cette chaîne.
S'abonner aux messages
s'abonner à la chaîne [canal] Les abonnés peuvent s'abonner à un ou plusieurs utilisateurs
127.0.0.1:6379> subscribe car:fans Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "car:fans" 3) (integer) 1
A ce moment, un utilisateur a déjà rejoint le groupe de coureurs. Petit à petit, de plus en plus de personnes rejoignent le groupe.
Lorsqu'un utilisateur publie un message, les autres membres du groupe peuvent voir le message.
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"
Remarque : lorsque le client exécute la commande d'abonnement, il entre dans l'état d'abonnement et ne peut exécuter que les commandes liées à pub/sub. De plus, les nouveaux utilisateurs qui rejoignent le groupe ne peuvent pas voir les messages précédents car ce mécanisme ne conserve pas les messages. Même si les fonctions sont limitées, c'est assez simple.
Encore une chose, plus il y a de fonctions, mieux c'est, cela dépend principalement de son adaptation à la scène. Si vous pouvez le faire, plus c’est simple, mieux c’est.
Afficher le nombre d'abonnements
pubsub numsub [channel...]
Vous souhaitez voir Combien d'utilisateurs y a-t-il dans le groupe
127.0.0.1:6379> pubsub numsub car:fans 1) "car:fans" 2) (integer) 2
Le groupe compte actuellement 2 utilisateurs.
Désabonnement
désabonnement [chaîne [chaîne ...]]
redis-cli UNSUBSCRIBE 1) "unsubscribe" 2) (nil) 3) (integer) 0
Combat pratique
Après avoir introduit les connaissances ci-dessus, nous pouvons compléter la fonction d'un salon de discussion.
Le pseudocode pour publier un message est très simple. Le pseudocode pour publier un message est le suivant :
function publist ($chanel, $message) { $redis->publist($channel, $message); }
Le pseudocode pour recevoir un message est le suivant :
//设置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(); }
Il y a plusieurs points à noter ici :
Les consommateurs doivent créer une connexion longue Redis,
définir set_time_limit et default_socket_timeout pour garantir que le blocage Le processus d'acquisition de messages php n'expire pas et la connexion socket n'expire pas
Actuellement, Redis propose un nouveau type Stream, qui est beaucoup plus puissant. Les amis intéressés peuvent vérifier eux-mêmes les informations pertinentes.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!