发送邮件出现问题

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 情况:收不到邮件。   邮件发送系统并没有问题。 排查思路:1、发送一次,先去数据库看看是否验证码是不是重新生成一次了select * from uc_verify_code where uid=21306555 目的是确保已经生成到数据库,因为只有这样子才会加入到数据库去的。

情况:收不到邮件。

 

邮件发送系统并没有问题。






排查思路:

1、发送一次,先去数据库看看是否验证码是不是重新生成一次了

select * from uc_verify_code where uid=21306555

目的是确保已经生成到数据库,因为只有这样子才会加入到数据库去的。

2、去看看redis队列任务的长度

加入到数据库后,才会加入到redis队列中去。

使用如下命令查看:

LLEN task_send_email

看看是不是为0。

 

目前发现是0。说明任务队列完全没有加入到redis中过去。去一下redis的空间。最后发现是redis爆满了,加不进去,其实加入的代码也有问题。没有进行判断。

 

要判断失败还是成功。这样会好点。


3、手动执行一下发送邮件的任务队列脚本:

这个任务带有锁的,同时刻只能一个脚本在执行,其他脚本是不能执行了

缓存锁是在redis里面存储了一个key,执行脚本的时候就存储进去。

 



key的值为:send_email_queue_lock

如果提示:is starting,就表示已经有其他进程在执行了。

要删除掉这个key:send_email_queue_lock



列出key的大小:

http://segmentfault.com/q/1010000000625993






以后要做一些工具。可以操作redis的工具,这样可以自己列出来看看。

其实搭建一个redis界面工具就能解决这个问题。

 

后续排查:redis的空间爆满,占据了20多g。怎么那么快。把那个占据内存最多的key:update_reside_ctiy,这是一个list数据结构。竟然有上亿条记录在里面了。

删除掉后,过了一天还是一样内存暴涨。最后去排查update_reside_ctiy这个key到底是什么原因涨得这么快。

 

被刷数据了




type key的值:

返回值:
    none (key不存在)
    string (字符串)
    list (列表)
    set (集合)
    zset (有序集)
    hash (哈希表)




列出key的大小:

http://segmentfault.com/q/1010000000625993


思考:当redis内存空间爆满的时候,并不会造成数据踢下去吗?还是加不进去呢?这样的代码逻辑要改一改才行了。
不会抛出异常的。平时要监控好才行。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
8月前
|
数据安全/隐私保护
邮件发送的原理,如何进行邮件发送
邮件发送的原理,如何进行邮件发送
|
6月前
|
监控 数据安全/隐私保护
Smtp邮件发送失败情况汇总
Smtp邮件发送失败情况汇总
347 0
|
6月前
|
JavaScript API PHP
不用SMTP实现联系表单提交后发送邮件到指定邮箱
构建网站时,联系表单可通过邮件API(如SendGrid、Mailgun、Amazon SES)或第三方自动化服务(Zapier、Integromat)无需SMTP发送邮件。这些服务提供API接口和自动化工作流程,简化邮件发送。例如,使用SendGrid API在Python中发送邮件涉及注册、获取API密钥并编写发送邮件的代码。同样,Zapier可作为表单提交的触发器,自动发送邮件。此外,后端脚本(如PHPMailer)也能实现这一功能,但需编写处理SMTP的代码。选择适合的方法能优化邮件发送流程。
|
8月前
|
搜索推荐 Go 网络安全
超详细的邮件发送,值得收藏分享
超详细的邮件发送,值得收藏分享
79 0
|
NoSQL API Redis
|
数据安全/隐私保护
使用MailUtils发送邮件
使用MailUtils发送邮件
|
网络协议 安全
调用邮件服务器进行发邮件
业务部门需求,要求阿里云上的服务器通过TCP 25端口进行外部邮件的发送
829 0
调用邮件服务器进行发邮件
|
存储 Java Spring
发送邮件那些事
邮件历史 世界的第一封电子邮件 1969年10月世界上的第一封电子邮件是由计算机科学家Leonard K.教授发给他的同事的一条简短消息。 据《互联网周刊》报道世界上的第一封电子邮件是由计算机科学家Leonard K.教授发给他的同事的一条简短消息(时间应该是1969年10月),这条消息只有两个字母:"LO"。
2527 0
|
测试技术 网络安全 C#