请教PHP+Redis实现任务队列的思路
我的PHP网站程序调用了一个外部网站的接口。
当用户输入数据,PHP程序会接收数据,然后根据数据请求那个外部网站的接口,获得数据返回给用户。
但是当多个用户同时提交数据时,PHP会同时请求那个接口,那个接口就会返回错误。
我现在是想用PHP+Redis做个队列,用户的请求会被放在Redis队列中,逐一去外部接口查询,避免同时请求接口的问题。
具体要怎么实现呢?
回复内容:
我的PHP网站程序调用了一个外部网站的接口。
当用户输入数据,PHP程序会接收数据,然后根据数据请求那个外部网站的接口,获得数据返回给用户。
但是当多个用户同时提交数据时,PHP会同时请求那个接口,那个接口就会返回错误。
我现在是想用PHP+Redis做个队列,用户的请求会被放在Redis队列中,逐一去外部接口查询,避免同时请求接口的问题。
具体要怎么实现呢?
试试这个
<code>// 创建请求ID标志, uniqid 无法保证唯一, 自己去搜索生成唯一的方法 $uuid = uniqid(); $tsk_name = "mytask"; $time_out = 30000; // 超时策略: 30秒 $time_start = time(); $redis->rPush($tsk_name, $uuid); // 右(后)插入队列 // 堵塞等待队列中第一个和$uuid匹配的(到我了) while($uuid != $redis->lGet($tsk_name, 0)){ if((time()-$time_start)> $time_out) { break; // 超时跳出(某些原因队列异常了, 可能永远取不到) } usleep(10); // sleep 10ms, 再次尝试 } // 这里执行任务的处理代码.... // $response 已拼装好要返回的内容 // 处理完成后(数据库等已入库更新), 需要: if($redis->lGet($tsk_name, 0) == $uuid){ // 再次确认第一个是本请求 $redis->lPop($tsk_name); // 完成任务了, 从队列中移除 } // 响应内容 return $response;</code>
手打未验证, 思路是这样.

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Le mode Redis Cluster déploie les instances Redis sur plusieurs serveurs grâce à la rupture, à l'amélioration de l'évolutivité et de la disponibilité. Les étapes de construction sont les suivantes: Créez des instances de redis étranges avec différents ports; Créer 3 instances Sentinel, Moniteur Redis Instances et basculement; Configurer les fichiers de configuration Sentinel, ajouter des informations d'instance Redis de surveillance et des paramètres de basculement; Configurer les fichiers de configuration d'instance Redis, activer le mode de cluster et spécifier le chemin du fichier d'informations de cluster; Créer un fichier nœuds.conf, contenant des informations de chaque instance redis; Démarrez le cluster, exécutez la commande CREATE pour créer un cluster et spécifiez le nombre de répliques; Connectez-vous au cluster pour exécuter la commande d'informations de cluster pour vérifier l'état du cluster; faire

Redis utilise cinq stratégies pour assurer le caractère unique des clés: 1. Séparation des espaces de noms; 2. Structure de données de hachage; 3. Définir la structure des données; 4. Caractères spéciaux des touches de chaîne; 5. Vérification du script LUA. Le choix de stratégies spécifiques dépend de l'organisation des données, des performances et des exigences d'évolutivité.

Redis utilise des tables de hachage pour stocker les données et prend en charge les structures de données telles que les chaînes, les listes, les tables de hachage, les collections et les collections ordonnées. Redis persiste les données via des instantanés (RDB) et ajoutez les mécanismes d'écriture uniquement (AOF). Redis utilise la réplication maître-esclave pour améliorer la disponibilité des données. Redis utilise une boucle d'événement unique pour gérer les connexions et les commandes pour assurer l'atomicité et la cohérence des données. Redis définit le temps d'expiration de la clé et utilise le mécanisme de suppression paresseux pour supprimer la clé d'expiration.

Pour afficher le numéro de version redis, vous pouvez utiliser les trois méthodes suivantes: (1) Entrez la commande Info, (2) Démarrez le serveur avec l'option - Version et (3) afficher le fichier de configuration.

Pour afficher toutes les touches dans Redis, il existe trois façons: utilisez la commande Keys pour retourner toutes les clés qui correspondent au modèle spécifié; Utilisez la commande SCAN pour itérer les touches et renvoyez un ensemble de clés; Utilisez la commande info pour obtenir le nombre total de clés.

Les ensembles commandés par Redis (ZSETS) sont utilisés pour stocker des éléments commandés et trier par des scores associés. Les étapes à utiliser ZSET incluent: 1. Créer un ZSET; 2. Ajouter un membre; 3. Obtenez un score de membre; 4. Obtenez un classement; 5. Obtenez un membre dans la gamme de classement; 6. Supprimer un membre; 7. Obtenez le nombre d'éléments; 8. Obtenez le nombre de membres dans la plage de score.

Utilisez l'outil de ligne de commande redis (Redis-CLI) pour gérer et utiliser Redis via les étapes suivantes: Connectez-vous au serveur, spécifiez l'adresse et le port. Envoyez des commandes au serveur à l'aide du nom et des paramètres de commande. Utilisez la commande d'aide pour afficher les informations d'aide pour une commande spécifique. Utilisez la commande QUIT pour quitter l'outil de ligne de commande.

Pour optimiser l'utilisation de la mémoire Redis, vous pouvez prendre les étapes suivantes: Utilisez des structures de données appropriées telles que les tables de hachage, les listes, les listes compressées ou les tables de hachage. Activer la compression de compresser les données en double. Utilisez le partage d'objets pour stocker des objets similaires. Limitez le nombre de clés et regroupez les clés relatives à l'aide de balises de hachage. Supprimer les clés expirées et utiliser la persistance pour éviter la perte de données. Utilisez RDB ou AOF comme méthode de persistance pour surveiller l'utilisation de la mémoire et utiliser un serveur de mémoire Redis. Utilisez des structures de données économes en espace, désactivez l'expiration paresseuse et contrôlez le nombre d'entrées de liste compressées dans ZSET.
