关于给用户发送邮件的一些问题
现在要给全部用户或者指定用户发送邮件,“发送”操作是由我们后台人员触发的。
发送操作提交后,我们就要给用户发送了,在发送过程中可能会存在一个问题,就是发送了一段时间后,程序因某些原因死掉了,这样就导致一些用户没有收到邮件,所以我的想法是发送前先把数据库里的用户全写入到一个文件中,发送时从文件中取用户,然后再弄个用户发送日志以记录哪些用户发送了,这样出问题后,可以从出问题的“那个地方”接着执行发送.....
不知道我的想法行不行,另外我担心“把数据库中的用户写入到文件中”这个过程所花费的时间会很长,从而导致性能上会存在隐患。谢谢大家讨论我的想法,给些意见或指点!
回复内容:
现在要给全部用户或者指定用户发送邮件,“发送”操作是由我们后台人员触发的。
发送操作提交后,我们就要给用户发送了,在发送过程中可能会存在一个问题,就是发送了一段时间后,程序因某些原因死掉了,这样就导致一些用户没有收到邮件,所以我的想法是发送前先把数据库里的用户全写入到一个文件中,发送时从文件中取用户,然后再弄个用户发送日志以记录哪些用户发送了,这样出问题后,可以从出问题的“那个地方”接着执行发送.....
不知道我的想法行不行,另外我担心“把数据库中的用户写入到文件中”这个过程所花费的时间会很长,从而导致性能上会存在隐患。谢谢大家讨论我的想法,给些意见或指点!
和@舞林 同学的想法有点相似:
- 把待发的邮件,存储到列表(Lists)中,通过
lpush
插入到Redis
消息队列中 - 负责发送邮件的代码中通过BRPOP依次消息队列中的内容并进行处理,如果没有新邮件则会阻塞等待直到有新的消息
这样的话不管程序死掉或者什么原因都不会千万消息丢失,同时也可以不用另外加一个定时任务
相比于写文件或者是其它的方法,Redis
是目前最合适的
Redis是一个开源、支持网络、基于内存、键值对存储数据库
参考:http://zh.wikipedia.org/zh/Redis
我的做法是邮件队列,放redis,crontab每分钟发送,脚本起来的时候发现上个脚本还在跑就退出,为了避免异常,脚本最多执行110秒。做好失败的监控,没啥问题。
还有什么呢,继续吧...

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)

Comment nettoyer toutes les données Redis: redis 2.8 et ultérieurement: La commande Flushall supprime toutes les paires de valeurs clés. Redis 2.6 et plus tôt: utilisez la commande del pour supprimer les clés une par une ou utilisez le client redis pour supprimer les méthodes. Alternative: redémarrez le service redis (utilisez avec prudence) ou utilisez le client redis (tel que Flushall () ou FlushDB ()).

Il existe plusieurs mécanismes de communication entre les instances Redis: Pub / Sub: Mode Publish / Sub, permettant une messagerie efficace et à faible latence. Mode de cluster: méthode de déploiement distribué, offrant une haute disponibilité et une tolérance aux défauts. Commande d'installation croisée: permet d'envoyer directement les commandes à une autre instance, adaptée à des fins opérationnelles ou administratives temporaires.

Ce guide fournit deux façons de déterminer la version Redis actuelle: utilisez la commande info pour obtenir le numéro de version. Utilisez l'option --version pour afficher directement le numéro de version. Le numéro de version se compose du numéro de version principale, du numéro de version secondaire et du numéro de révision, qui représentent respectivement les grandes mises à jour de version, les améliorations fonctionnelles et les corrections de bogues mineurs.

Les étapes du redémarrage du cluster redis sont les suivantes: Fermer et effacer les données et les journaux. Démarrez le nœud de graine. Créez un nouveau cluster. Ajouter les nœuds restants. Vérifiez l'état du cluster.

Redis peut être redémarré de deux manières: redémarrage lisse et redémarrage dur. Redémarrer en douceur sans interrompre le service, permettant au client de poursuivre les opérations; Le redémarrage dur termine immédiatement le processus, ce qui fait que le client se déconnecte et perd des données. Il est recommandé d'utiliser un redémarrage en douceur dans la plupart des cas, uniquement si vous devez réparer de graves erreurs ou nettoyer vos données.

Redis implémente le multi-lancement en combinant intelligemment le mode des réacteurs, le pool de threads et les mécanismes internes multi-threading, en utilisant ainsi efficacement les processeurs multi-core, en améliorant le débit, en optimisant l'utilisation des ressources, en maintenant une faible latence et en améliorant l'évolutivité et en répondant à différents besoins de charge.

Les transactions Redis garantissent les propriétés de l'atomicité, de la cohérence, de l'isolement et de la persistance (acide) et fonctionnent comme suit: Démarrez une transaction: utilisez la commande multi-commandes. Commande d'enregistrement: exécutez n'importe quel nombre de commandes redis. Commit ou enrager les transactions: utilisez la commande exec pour engager la transaction, ou la commande de défausse pour annuler la transaction. Commit: S'il n'y a pas d'erreur, la commande EXEC engage la transaction et toutes les commandes sont appliquées atomiquement à la base de données. Rollback: S'il y a une erreur, la commande de défausse recule la transaction, toutes les commandes sont rejetées et l'état de la base de données reste inchangé.

Le cluster Redis est un modèle de déploiement distribué qui permet une expansion horizontale des instances Redis, et est implémentée via la communication inter-nœuds, l'espace clé de la division des emplacements de hachage, l'élection du nœud, la réplication maître-esclave et la redirection de commande: communication inter-nœuds: la communication du réseau virtuel est réalisée via le bus de cluster. Slot de hachage: divise l'espace clé en emplacements de hachage pour déterminer le nœud responsable de la clé. Élection du nœud: au moins trois nœuds maîtres sont nécessaires et un seul nœud maître actif est assuré par le mécanisme électoral. Réplication maître-esclave: le nœud maître est responsable de la rédaction de demandes, et le nœud esclave est responsable des demandes de lecture et de la réplication des données. Redirection de commande: le client se connecte au nœud responsable de la clé et le nœud redirige les demandes incorrectes. Dépannage: détection des défauts, marquer la ligne et re
