Redis的安装以及在项目中使用Redis的一些总结和体(9)

/*
            * 测试了网易和qq邮箱,能发是能发但是,对所发的邮件标题和内容是有限制的,不能发很容就能识别出来是垃圾邮件的邮件,标题和正文要正式点,负责不会接收到。
            * 在生产环境中:无法使用163、qq等这种免费邮箱发送大量的邮件。
            * Edm专用服务器,掏钱就ok。
            SendCloud、Comm100、yiye
            */

邮件发送代码:

public static void SendEmail(string toEmail, string subject, string body)
        {
            string smtpServer = ConfigurationManager.AppSettings["SmtpServer"];
            string smtpFrom = ConfigurationManager.AppSettings["SmtpFrom"];
            string smtpUserName = ConfigurationManager.AppSettings["SmtpUserName"];
            string smtpPassword = ConfigurationManager.AppSettings["SmtpPassword"];

MailMessage mailObj = new MailMessage();
            mailObj.IsBodyHtml = true;
            //from:abc@qq.com
            mailObj.From = new MailAddress(smtpFrom); //发送人邮箱地址
            mailObj.To.Add(toEmail);  //收件人邮箱地址
            mailObj.Subject = subject;    //主题
            mailObj.Body = body;    //正文
            SmtpClient smtp = new SmtpClient();//通过.Net内置的SmtpClient类和邮件服务器进行通讯,发送邮件。
            //是和发邮件方的smtp通讯,由发邮件方的邮件服务器和收邮件方的邮件服务器通讯进行邮件的转接。
            smtp.Host = smtpServer;        //smtp服务器名称
            smtp.UseDefaultCredentials = true;
            smtp.Credentials = new NetworkCredential(smtpUserName, smtpPassword);  //发送人的登录名和密码
            smtp.Send(mailObj);
        }

关于邮箱的账号和密码最好配置到配置文件中。为了安全。

好好思考一下这样写的缺陷在哪?不仅有缺陷而且还有安全问题,有哪些安全问题?如果用户量大的话这样设计是否合理?会对什么有压力?如果不合理该如何优化?

首先我们来分析一下:

上面的方法是在用户表的基础上再增加一个字段,用来存激活码。这样合理吗?
由于激活码只用一次,所以在用户表的基础上再增加一个字段会麻烦一下,之前的功能会有影响。那到底该怎么解决比较好?

这时候Redis的好处就非常明显了,key-value数据库,并且还能设置数据的有效时间,很好的解决了上面遇到的问题,只需要改动上面很少的一部分代码就可以实现想要的功能。

代码如下:

1 //方案二:把激活码存入的Redis中(最佳) 2 //Redis代替数据库保存UserName和激活码的字典结构 3 using (var client = RedisManager.ClientManager.GetClient()) 4 { 5 client.Set<string>(ACTIVECODE_PREFIX + username, activeCode, DateTime.Now.AddMinutes(30)); 6 }

View Code

如果到这里真的就OK了吗?大家可以想想为什么我要添加下面的这段代码:

1 //把注册用户信息,放入消息队列。便于另外一个程序来获取消息队列数据,发送邮件 2 using (var client = RedisManager.ClientManager.GetClient()) 3 { 4 string info = username + "|" + email; 5 client.EnqueueItemOnList("NewRegUsers", info); 6 }

下面关于Redis的文章您也可能喜欢,不妨参考下:

Ubuntu 14.04下Redis安装及简单测试

Redis主从复制基本配置

CentOS 7下Redis的安装与配置

Ubuntu 14.04安装Redis与简单配置

Ubuntu 16.04环境中安装PHP7.0 Redis扩展

Redis 单机&集群离线安装部署

CentOS 7.0 安装Redis 3.2.1详细过程和使用常见问题

Ubuntu 16.04环境中安装PHP7.0 Redis扩展

Ubuntu 15.10下Redis集群部署文档

Redis实战 中文PDF  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/e7098e21afb944b607e5c5230c350d78.html