Lors de l'entretien avec le programmeur PHP, nous pouvons également rencontrer des questions d'entretien sur Redis. Cet article partage principalement avec vous les questions d'entretien les plus courantes dans Redis, dans l'espoir d'aider tout le monde.
Recommandation spéciale : Questions d'entretien Redis 2020 (dernières)
Caractéristiques de Reids
Redis est essentiellement une base de données en mémoire de type clé-valeur, un peu comme memcached. L'intégralité de la base de données est chargée dans la mémoire pour fonctionner, et les données de la base de données sont régulièrement vidées sur le disque dur pour être stockées via des opérations asynchrones. Parce qu'il s'agit d'une opération de mémoire pure, Redis a d'excellentes performances et peut gérer plus de 100 000 opérations de lecture et d'écriture par seconde. Il s'agit de la base de données clé-valeur la plus rapide connue pour être
.
L'excellence de Redis ne réside pas seulement dans ses performances. Le plus grand charme de Redis est qu'il prend en charge la sauvegarde d'une variété de structures de données. De plus, la limite maximale d'une seule valeur est de 1 Go, contrairement à Memcached. n'économisant que 1 Mo de données, Redis peut Il est utilisé pour implémenter de nombreuses fonctions utiles, telles que l'utilisation de sa List pour créer une liste FIFO doublement liée, l'implémentation d'un service de file d'attente de messages léger et hautes performances et l'utilisation de son Set pour créer une file d'attente de messages hautes performances. système de balises, etc. De plus, Redis peut également définir le délai d'expiration de la valeur-clé stockée, elle peut donc également être utilisée comme version améliorée de memcached.
Le principal inconvénient de Redis est que la capacité de la base de données est limitée par la mémoire physique et ne peut pas être utilisée pour une lecture et une écriture hautes performances de données massives. Par conséquent, les scénarios adaptés à Redis se limitent principalement aux hautes performances. opérations et calculs de petites quantités de données.
3. Quels sont les avantages de l'utilisation de Redis ?
(1) C'est rapide car les données sont stockées en mémoire, similaire à HashMap. L'avantage de HashMap est que la complexité temporelle de la recherche et de l'opération est O(1)
(2) Il prend en charge. types de données riches, prend en charge la chaîne, la liste, l'ensemble, l'ensemble trié, le hachage
(3) Prend en charge les transactions, les opérations sont atomiques. La soi-disant atomicité signifie que toutes les modifications apportées aux données sont exécutées ou ne sont pas exécutées du tout (4) Fonctionnalités riches : peut être utilisé pour le cache, les messages, définir le délai d'expiration par clé et sera automatiquement supprimé après l'expiration
Quels sont les avantages de Redis par rapport à Memcached ?
(1) Toutes les valeurs dans memcached sont des chaînes simples, et redis, en remplacement, prend en charge des types de données plus riches (2) Redis est beaucoup plus rapide que memcached ( 3) redis peut conserver ses données
5. Quelles sont les différences entre Memcache et Redis ?
1) Méthode de stockage Memecache stocke toutes les données dans la mémoire. Il raccrochera après une panne de courant. Les données ne peuvent pas dépasser la taille de la mémoire. Une partie de Redis est stockée sur le disque dur, ce qui garantit la persistance des données. 2) Types de données pris en charge Memcache prend en charge des types de données relativement simples. Redis a des types de données complexes.
3). Les modèles sous-jacents utilisés sont différents. Leurs méthodes de mise en œuvre sous-jacentes et leurs protocoles d'application pour la communication avec les clients sont différents. Redis a directement construit son propre mécanisme de VM, car si le système général appelle les fonctions système, il perdra un certain temps à se déplacer et à demander.
6. Problèmes de performances courants et solutions de Redis :
1).Master écrit un instantané de mémoire et la commande save planifie la fonction rdbSave, qui bloquera le travail du thread principal. Lorsque l'instantané est relativement volumineux, cela aura un impact important sur les performances et le service sera suspendu par intermittence, il est donc préférable que le maître n'écrive pas d'instantanés de mémoire. 2) Maîtrisez la persistance AOF. Si le fichier AOF n'est pas réécrit, cette méthode de persistance aura le plus petit impact sur les performances, mais le fichier AOF continuera à croître si le fichier AOF est trop volumineux. affectera la récupération de la vitesse de redémarrage du maître. Il est préférable de ne pas effectuer de travail de persistance sur le maître, y compris les instantanés de mémoire et les fichiers journaux AOF. En particulier, n'activez pas les instantanés de mémoire pour la persistance. Si les données sont critiques, un esclave doit activer les données de sauvegarde AOF. activer les données de sauvegarde AOF à chaque fois. 3). Le maître appelle BGREWRITEAOF pour réécrire le fichier AOF occupera une grande quantité de ressources CPU et mémoire pendant la réécriture, ce qui entraînera une charge de service excessive et une suspension du service à court terme. 4). Problèmes de performances de la réplication maître-esclave Redis Pour la vitesse de réplication maître-esclave et la stabilité de la connexion, il est préférable que l'esclave et le maître soient dans le même LAN7. Il y a 20 millions de données dans MySQL, mais seulement 200 000 données sont stockées dans Redis. Comment s'assurer que les données dans Redis sont des données chaudes
.Connaissances pertinentes : lorsque la taille de l'ensemble de données de la mémoire Redis augmente jusqu'à une certaine taille, une stratégie d'élimination des données (stratégie de recyclage) sera mise en œuvre. redis propose 6 stratégies d'élimination des données :
volatile-lru : sélectionnez les données les moins récemment utilisées dans l'ensemble de données (server.db[i].expires) avec un délai d'expiration défini pour l'élimination .
volatile-ttl : sélectionnez les données qui expireront dans l'ensemble de données (server.db[i].expires) qui a défini un délai d'expiration pour éliminer
volatile-random : sélectionnez aléatoirement les données à éliminer de l'ensemble de données (server.db[i].expires) avec un délai d'expiration défini
allkeys-lru : À partir de l'ensemble de données (sélectionnez les données les moins récemment utilisées dans server.db[i].dict) pour éliminer
allkeys-random : sélectionnez arbitrairement les données dans l'ensemble de données (server.db [i].dict) Éliminer
no-enviction (expulsion) : interdire l'expulsion des données
8. Veuillez utiliser Redis et n'importe quel langage pour implémenter un code protégé de connexion malveillant, limite chaque identifiant utilisateur à un maximum de 5 connexions en 1 heure. Pour des fonctions ou fonctions de connexion spécifiques, utilisez simplement une fonction vide et il n'est pas nécessaire de les écrire en détail.
Utilisez une liste pour implémenter : Chaque élément de la liste représente l'heure de connexion. Tant que la différence entre la 5ème heure de connexion et l'heure actuelle n'est pas supérieure à 1 heure, la connexion est interdite. écrit en Python est le suivant :
#!/usr/bin/env python3 import redis import sys import time r = redis.StrictRedis(host=’127.0.0.1′, port=6379, db=0) try: id = sys.argv[1] except: print(‘input argument error’) sys.exit(0) if r.llen(id) >= 5 and time.time() – float(r.lindex(id, 4)) <= 3600: print(“you are forbidden logining”) else: print(‘you are allowed to login’) r.lpush(id, time.time()) # login_func()
9. Pourquoi Redis doit-il mettre toutes les données en mémoire
Afin d'obtenir le résultat le plus rapide ? vitesse de lecture et d'écriture, Redis lit toutes les données en mémoire et écrit les données sur le disque de manière asynchrone. Redis présente donc les caractéristiques d'une vitesse rapide et d'une persistance des données. Si les données ne sont pas placées en mémoire, la vitesse des E/S du disque affectera sérieusement les performances de Redis. Aujourd'hui, alors que la mémoire devient de moins en moins chère, Redis deviendra de plus en plus populaire.
Si la mémoire maximale utilisée est définie, de nouvelles valeurs ne peuvent pas être insérées une fois que le nombre d'enregistrements de données atteint la limite de mémoire.
10.Redis est à processus unique et à thread unique
Redis utilise la technologie de file d'attente pour transformer l'accès simultané en accès série, éliminant ainsi la surcharge du contrôle série de base de données traditionnel
11. Comment résoudre le problème de concurrence concurrentielle de Redis ?
Redis est un mode mono-thread à processus unique, utilisant le mode file d'attente pour transformer l'accès simultané en accès série. . Redis lui-même n'a aucune notion de verrous. Redis n'est pas en concurrence pour plusieurs connexions client. Cependant, lorsque le client Jedis accède simultanément à Redis, des problèmes tels que l'expiration du délai de connexion, les erreurs de conversion de données, le blocage et la fermeture de la connexion par le client peuvent survenir. sont tous causés par
en raison d'une confusion de connexion client. Il existe 2 solutions à cela :
1. Du point de vue du client, afin de garantir que chaque client communique avec Redis de manière normale et ordonnée, la connexion est mutualisée, et en même temps, le client lit et écrit les opérations Redis. Le verrou interne est synchronisé.
2. Du point de vue du serveur, utilisez setnx pour implémenter le verrouillage.
Remarque : Pour le premier type, l'application doit gérer elle-même la synchronisation des ressources. Les méthodes qui peuvent être utilisées sont relativement courantes, vous pouvez utiliser synchronisé ou lock ; le deuxième type nécessite l'utilisation de la commande setnx de Redis, mais il y a certains problèmes auxquels il faut prêter attention.
12. Quelle est la compréhension de CAS (opération de vérification et de définition pour implémenter le verrouillage optimiste) dans Redis ?
Comme beaucoup d'autres bases de données, Redis est également fourni. en tant que mécanisme de transaction de base de données NoSQL. Dans Redis, les quatre commandes MULTI/EXEC/DISCARD/WATCH sont la pierre angulaire de notre implémentation de transactions. Je pense que ce concept n'est pas étranger aux développeurs expérimentés dans le développement de bases de données relationnelles. Néanmoins, nous énumérerons brièvement les caractéristiques d'implémentation des
transactions dans Redis :
1). être exécuté en série et séquentiellement Pendant l'exécution de la transaction, Redis ne fournira plus aucun service pour les autres demandes des clients, garantissant ainsi que toutes les commandes de la transaction sont exécutées de manière atomique. 2). Par rapport aux transactions dans les bases de données relationnelles, si une commande ne s'exécute pas dans une transaction Redis, les commandes suivantes continueront d'être exécutées.
3). Nous pouvons démarrer une transaction via la commande MULTI, que les personnes ayant de l'expérience dans le développement de bases de données relationnelles peuvent comprendre comme l'instruction "BEGIN TRANSACTION". Les commandes exécutées après cette instruction seront considérées comme des opérations au sein de la transaction. Enfin, nous pouvons valider/annuler toutes les opérations au sein de la transaction en exécutant la commande EXEC/DISCARD. Ces deux-là
Une commande Redis peut être considérée comme équivalente à l'instruction COMMIT/ROLLBACK dans une base de données relationnelle.
4). Avant le démarrage de la transaction, s'il y a un échec de communication entre le client et le serveur et que le réseau est déconnecté, toutes les instructions ultérieures à exécuter ne seront pas exécutées par le serveur. Cependant, si l'événement d'interruption du réseau se produit après que le client a exécuté la commande EXEC, toutes les commandes de la transaction seront exécutées par le serveur.
5). Lors de l'utilisation du mode Append-Only, Redis écrira toutes les opérations d'écriture de la transaction sur le disque lors de cet appel en appelant la fonction système write. Cependant, si une panne du système se produit pendant le processus d'écriture, telle qu'un temps d'arrêt provoqué par une panne de courant, seule une partie des données peut être écrite sur le disque à ce moment-là, tandis qu'une autre partie des données est perdue.
Le serveur Redis effectuera une série de contrôles de cohérence nécessaires lors du redémarrage. Une fois qu'un problème similaire est détecté, il se fermera immédiatement et affichera une invite d'erreur correspondante. À l'heure actuelle, nous devons utiliser pleinement l'outil redis-check-aof fourni dans la boîte à outils Redis. Cet outil peut nous aider à localiser les erreurs d'incohérence des données et à renvoyer une partie des données qui ont été écrites
roll. Après la réparation, nous pouvons redémarrer le serveur Redis.
13.Commande WATCH et verrouillage optimiste basé sur CAS :
Dans les transactions Redis, la commande WATCH peut être utilisée pour fournir la fonctionnalité CAS (check-and-set) . Supposons que nous surveillons plusieurs clés via la commande WATCH avant l'exécution de la transaction. Si la valeur d'une clé change après WATCH, la transaction exécutée par la commande EXEC sera abandonnée et une réponse multi-bulk Null sera renvoyée pour informer l'appelant. de la transaction
L'exécution a échoué. Par exemple, nous supposons encore que la commande incr n'est pas fournie dans Redis pour compléter l'incrément atomique des valeurs clés. Si nous voulons implémenter cette fonction, nous ne pouvons écrire que nous-mêmes le code correspondant. Le pseudo code est le suivant :
val = GET mykey
val = val + 1
SET mykey $val
Le code ci-dessus ne peut garantir que le résultat de l'exécution est correct que dans le cas d'un seul connexion, car si plusieurs clients exécutent ce code en même temps, un scénario d'erreur qui se produit souvent dans les programmes multithread se produira - une condition de concurrence critique. Par exemple, les clients A et B lisent la valeur originale de mykey en même temps. Supposons que la valeur soit 10. Après cela, les deux clients en ajoutent un à la valeur et la redéfinissent sur le serveur Redis. de mykey à perdre. Le résultat est 11, pas 12 comme nous le pensions. Afin de résoudre des problèmes similaires, nous avons besoin de l'aide de la commande WATCH, voir le code suivant :
WATCH mykey
val = GET mykey
val = val + 1
MULTI
SET mykey $val
EXEC
Différent du code précédent, le nouveau code surveille la clé via la commande WATCH avant d'obtenir la valeur de mykey, puis entoure la commande set dans la transaction, ce qui peut efficacement garantir que chaque connexion est Avant d'exécuter EXEC, si la valeur de mykey obtenue par la connexion actuelle est modifiée par un autre client connecté, la commande EXEC de la connexion actuelle ne pourra pas s'exécuter. De cette façon, l'appelant peut savoir si val a été réinitialisé avec succès après avoir jugé la valeur de retour.
14. Plusieurs méthodes de persistance Redis
1 Instantanés
Par défaut, Redis stocke les instantanés de données sur le disque Dans le fichier binaire, le nom du fichier est dump. .rdb. Vous pouvez configurer la stratégie de persistance de Redis. Par exemple, s'il y a plus de M mises à jour dans l'ensemble de données toutes les N secondes, les données seront écrites sur le disque ou vous pouvez appeler manuellement la commande SAVE ou BGSAVE ;
Principe de fonctionnement
. Fourches Redis.
. Le processus enfant commence à écrire des données dans le fichier RDB temporaire.
. Lorsque le processus enfant a fini d'écrire le fichier RDB, remplacez l'ancien fichier par le nouveau fichier.
. Cette méthode permet à Redis d'utiliser la technologie de copie sur écriture.
2. AOF
Le mode instantané n'est pas très robuste Lorsque le système s'arrête ou que Redis est accidentellement tué, les dernières données écrites sur Redis seront perdues. Ce n'est peut-être pas un gros problème pour certaines applications, mais pour les applications qui nécessitent une grande fiabilité,
Redis n'est pas un choix approprié.
Le mode fichier Ajouter uniquement est une autre option.
Vous pouvez activer le mode AOF dans le fichier de configuration
3. Mode mémoire virtuelle
Lorsque votre clé est petite et que la valeur est grande, l'effet de l'utilisation de la VM sera meilleur car la mémoire enregistrée dans celle-ci way est relativement grand.
Lorsque votre clé n'est pas petite, vous pouvez envisager d'utiliser des méthodes extraordinaires pour transformer une grande clé en une grande valeur. Par exemple, vous pouvez envisager de combiner la clé et la valeur en une nouvelle valeur. > vm-max Le paramètre -threads permet de définir le nombre de threads qui accèdent au fichier d'échange. Il est préférable de ne pas dépasser le nombre de cœurs de la machine. S'il est défini sur 0, alors toutes les opérations sur le fichier d'échange. sera en série. Cela peut entraîner un long retard, mais il existe une bonne garantie pour l'intégrité des données.
Lorsque je l'ai testé moi-même, j'ai constaté que les performances d'utilisation de la mémoire virtuelle sont également bonnes. Si la quantité de données est importante, vous pouvez envisager des bases de données distribuées ou autres
15. La stratégie d'invalidation du cache et le mécanisme d'invalidation de clé primaire de Redis
En tant que système de cache, il doivent être régulièrement nettoyées et invalidées. Les données nécessitent une stratégie d'invalidation et d'élimination de clé primaire
Dans Redis, les clés avec une durée de vie sont dites volatiles. Lors de la création d'un cache, définissez la durée de vie d'une clé donnée. Lorsque la clé expire (la durée de vie est 0), elle peut être supprimée.
1. Certaines opérations qui affectent le temps de survie
Le temps de survie peut être supprimé en utilisant la commande DEL pour supprimer la clé entière, ou les données d'origine peuvent être écrasées par les commandes SET et GETSET, c'est-à-dire modifier la valeur et la valeur correspondant à la clé. Après écrasement avec la même clé et la même valeur, le temps de survie des données actuelles est différent.
Par exemple, exécuter la commande INCR sur une clé, exécuter la commande LPUSH sur une liste, ou exécuter la commande HSET sur une table de hachage, ces opérations ne modifieront pas le temps de survie de la clé elle-même. En revanche, si vous utilisez RENAME pour renommer une clé, le temps de survie de la clé renommée sera le même qu'avant le renommage.
Une autre possibilité de la commande RENAME est d'essayer de renommer une clé avec un temps de survie en another_key avec un temps de survie. A ce moment, l'ancienne another_key (et son temps de survie) sera supprimée, puis l'ancienne clé. sera renommé another_key. Par conséquent, la durée de survie de la nouvelle another_key est la même que celle de la clé d'origine. Utilisez la commande PERSIST pour supprimer la durée de vie de la clé sans supprimer la clé, ce qui fait de la clé une clé persistante.
2. Comment mettre à jour le temps de survie
Vous pouvez exécuter la commande EXPIRE sur une clé qui a déjà un temps de survie, et le temps de survie nouvellement spécifié remplacera l'ancien temps de survie. La précision du délai d'expiration a été contrôlée dans un délai de 1 ms et la complexité temporelle de l'échec de la clé primaire est O(1)
Utilisez les commandes EXPIRE et TTL ensemble pour afficher la durée de survie actuelle de la clé. Renvoie 1 si le réglage réussit ; renvoie 0 lorsque la clé n'existe pas ou que le temps de survie ne peut pas être défini pour la clé.
Configuration maximale du cache
Dans Redis, les utilisateurs sont autorisés à définir la taille maximale de la mémoire
server.maxmemory
La valeur par défaut est 0 et la taille maximale du cache n'est pas spécifiée si de nouvelles données sont ajoutées et dépassent. la mémoire maximale, alors il plantera Redis, il doit donc être défini. Lorsque la taille de l'ensemble de données de la mémoire Redis augmente jusqu'à une certaine taille, la stratégie d'élimination des données sera mise en œuvre.
redis propose 6 stratégies d'élimination des données :
. volatile-lru : sélectionnez les données les moins récemment utilisées dans l'ensemble de données (server.db[i].expires) avec un délai d'expiration défini pour éliminer
. volatile-ttl : Sélectionnez les données sur le point d'expirer dans l'ensemble de données (server.db[i].expires) avec un délai d'expiration défini pour être éliminées
. volatile-random : Sélectionnez aléatoirement les données à éliminer de l'ensemble de données (server.db[i].expires) avec un délai d'expiration défini
. allkeys-lru : Sélectionnez les données les moins récemment utilisées dans l'ensemble de données (server.db[i].dict) pour éliminer
. allkeys-random : sélectionner arbitrairement les données à éliminer de l'ensemble de données (server.db[i].dict)
. no-enviction (eviction) : interdire l'expulsion des données
Faites attention aux 6 mécanismes ici Volatile et allkeys précisent s'il faut éliminer les données de l'ensemble de données avec un délai d'expiration ou de tous les ensembles de données. et Random, ce sont trois stratégies d'élimination différentes, plus une stratégie sans condamnation qui ne recycle jamais.
Utiliser les règles de politique :
1. Si les données présentent une distribution de loi de puissance, c'est-à-dire que certaines données ont une fréquence d'accès élevée et d'autres ont une fréquence d'accès faible, alors utilisez allkeys-lru
2. Si le les données présentent une distribution égale, c'est-à-dire que toutes les fréquences d'accès aux données sont les mêmes, alors utilisez allkeys-random
Trois stratégies d'élimination des données :
ttl et random sont plus faciles à comprendre et la mise en œuvre sera plus simple. La raison principale est que Lru a utilisé la stratégie d'élimination au moins récemment. La conception triera les clés en fonction du délai d'expiration, puis prendra la première clé invalide pour l'éliminer
16. scénario approprié pour redis
Redis est le plus approprié pour tous les scénarios de données en mémoire. Bien que Redis fournisse également une fonction de persistance, il s'agit en fait davantage d'une fonction sauvegardée sur disque, ce qui est assez différent de la persistance dans. au sens traditionnel. Ensuite, tout le monde aura peut-être des questions. Il semble que Redis ressemble plus à une version améliorée de Memcached, alors quand utiliser Memcached et quand utiliser Redis ?
Si vous comparez simplement les différences entre Redis et Memcached, la plupart des gens obtiendront les opinions suivantes :
1. Redis prend non seulement en charge les données simples de type k/v, mais fournit également le stockage de structures de données telles que la liste, l'ensemble, le zset et le hachage.
2. Redis prend en charge la sauvegarde des données, c'est-à-dire la sauvegarde des données en mode maître-esclave.
3. Redis prend en charge la persistance des données, qui peut conserver les données en mémoire sur le disque et peut être rechargée pour être utilisée lors du redémarrage.
(1), Cache de session
L'un des scénarios d'utilisation de Redis les plus couramment utilisés est le cache de session. L'avantage d'utiliser Redis pour mettre en cache les sessions par rapport à d'autres stockages (tels que Memcached) est que Redis offre la persistance. Lors de la maintenance d'un cache qui n'exige pas strictement de cohérence, la plupart des gens seront mécontents si toutes les informations du panier de l'utilisateur sont perdues. Maintenant,
Seront-ils toujours comme ça ?
Heureusement, à mesure que Redis s'est amélioré au fil des années, il est facile de comprendre comment utiliser correctement Redis pour mettre en cache les documents de session. Même la célèbre plateforme commerciale Magento propose des plug-ins Redis.
(2), Full Page Cache (FPC)
En plus des jetons de session de base, Redis fournit également une plate-forme FPC très simple. Revenons au problème de cohérence, même si l'instance Redis est redémarrée, les utilisateurs ne verront pas de baisse de la vitesse de chargement des pages en raison de la persistance du disque. Il s'agit d'une grande amélioration, similaire au FPC local PHP.
En prenant à nouveau Magento comme exemple, Magento fournit un plug-in pour utiliser Redis comme backend de cache pleine page.
De plus, pour les utilisateurs de WordPress, Pantheon dispose d'un très bon plug-in wp-redis, qui pourra vous aider à charger le plus rapidement possible les pages que vous avez parcourues.
(3), Queue
L'un des grands avantages de Redis dans le domaine des moteurs de stockage de mémoire est qu'il fournit des opérations de liste et d'ensemble, ce qui permet à Redis d'être utilisé comme une bonne plate-forme de file d'attente de messages. Les opérations utilisées par Redis comme file d'attente sont similaires aux opérations push/pop de liste dans les langages de programmation locaux (tels que Python).
Si vous recherchez rapidement « Files d'attente Redis » dans Google, vous trouverez immédiatement un grand nombre de projets open source. Le but de ces projets est d'utiliser Redis pour créer de très bons outils back-end pour répondre à divers besoins de files d'attente. Par exemple, Celery a un backend qui utilise Redis comme courtier. Vous pouvez le visualiser à partir d'ici.
(4), Ranking/Counter
Redis implémente très bien l'opération d'incrémentation ou de décrémentation des nombres en mémoire. Les ensembles et les ensembles triés nous permettent également d'effectuer très simplement ces opérations. Redis fournit simplement ces deux structures de données. Nous voulons donc obtenir les 10 meilleurs utilisateurs de l'ensemble trié - appelons-le "user_scores", nous devons simplement l'exécuter comme suit :
ZRANGE user_scores 0 10 WITHSCORES
Agora Games est un bon exemple, implémenté dans Ruby, et ses classements utilisent Redis Pour stocker des données, vous pouvez le voir ici.
(5), publication/abonnement
Dernier (mais certainement pas le moindre) est la fonction de publication/abonnement de Redis. Il existe en effet de nombreux cas d’usage pour la publication/abonnement. J'ai vu des gens l'utiliser dans les connexions de réseaux sociaux, comme déclencheurs de scripts basés sur la publication/abonnement, et même pour créer des systèmes de discussion en utilisant la fonctionnalité de publication/abonnement de Redis ! (Non, c'est vrai, vous pouvez le vérifier
).
Recommandations associées :
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!