redis - 一个领券的队列问题
伊谢尔伦
伊谢尔伦 2017-04-28 09:04:36
0
5
887

用户在领券页面点击领取后,调用后台服务接口A,接口A将该领取操作写入队列:

// 写入队列
addQue(....)

然后呢,写入队列后紧接着循环读取队列吗?用户还在那等着是否领取成功的结果。

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

répondre à tous(5)
曾经蜡笔没有小新

https://redis.io/topics/pubsub

Redis prend en charge la publication/l'abonnement

某草草

Ce que je sais, c'est faire un sondage sur la page de réussite de la collecte des coupons (ou websocket avec redis pubsub pour une meilleure expérience) pour obtenir le résultat final.

过去多啦不再A梦

Les exigences du produit sont synchrones (les résultats sont renvoyés de manière synchrone) et la file d'attente est principalement utilisée pour réaliser une implémentation asynchrone, telle que des commandes, des notifications, etc.
Si vous souhaitez vraiment utiliser une file d'attente pour simuler les résultats de synchronisation, vous ne pouvez obtenir les résultats du coupon que séparément.

"Redis prend en charge la publication/l'abonnement" : il y a quelques problèmes avec l'utilisation de ce mode

  1. Il y a trop de chaînes à définir. Si une chaîne est réutilisée, les abonnés devront filtrer beaucoup de messages et un protocole de texte est requis (la publication ne prend en charge que le texte)

  2. Après avoir soumis une demande au service, s'il raccroche avant de recevoir une réponse, les informations du coupon seront perdues

Les suggestions sont les suivantes :

  1. Le meilleur moyen est de modifier la requête asynchrone en requête synchrone

  2. Sinon, vous pouvez envisager de mettre le résultat du traitement de la requête dans un hash (id-> result)

小葫芦

S'il est asynchrone et que le résultat de la collecte n'est pas renvoyé via la demande de collecte, si vous utilisez ajax comme mentionné ci-dessus pour obtenir le résultat de la collecte, il n'est pas nécessaire que ajax lance la demande en boucle, car vous ne savez pas lorsque le résultat de la collecte sera publié, vous ne pourrez le faire que tant que l'interrogation sera impliquée, des problèmes surviendront. Si l'intervalle d'interrogation est trop court, le serveur sera soumis à une forte pression. Si l'intervalle d'interrogation est long, il y aura un retard. dans la notification et la réception des résultats.

Si vous ne souhaitez pas effectuer de synchronisation, vous pouvez utiliser websocket. Les deux parties peuvent communiquer et échanger des données à tout moment et sans délai.
Ou utilisez SSE (Server-sent Events) pour envoyer directement des messages. WebSocket est bidirectionnel et SSE est unidirectionnel, ce qui est suffisant pour envoyer des messages.

服务器推送事件(Server-sent Events),简称SSE,是 HTML 5 规范中的一个组成部分,可以用来从服务端实时推送数据到浏览器端。相对于与之类似的 COMET 和 WebSocket 技术来说,服务器推送事件的使用更简单,对服务器端的改动也比较小。对于某些类型的应用来说,服务器推送事件是最佳的选择。

Lien SSESSE

En ce qui concerne le processus de fonctionnement interne du serveur, il existe de nombreuses options. Tant qu'une couche de cache ou de mq est ajoutée au milieu, un fonctionnement asynchrone peut être réalisé. Par exemple, zmq, redis pub/sub, etc.

PHPzhong

Recherche de connaissances. . . .

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal