我知道有些地方没说到位,希望大神们提出来,我会吸取教训,大家共同进步!
三种方法:(1)数据库(2)页面静态化(3)Redis、Memcached
概述:redis是一种nosql数据库,他的数据是保存在内存中,同时redis可以定时把内存数据同步到磁盘,即可以将数据持久化,并且他比memcached支持更多的数据结构(string,list列表[队列和栈],set[集合],sorted set[有序集合] hash(hash表))
注:关于Redis的安装网上有很多文章,讲的要比我的好,建议大家去看那些大神的文章,这里我只简单介绍一下。
3.1C#中如何使用Redis来解决邮箱激活的实效性。
首先思考个问题:为什么要进行邮件激活?激活码该存到哪里?(大家先思考,我不直接说,这样通过下面的例子你会体会的更深。)
原因:用户在注册的时候,虽然正则表达式能检查邮箱的格式是否正确,但是正则检查不了邮箱是否可用,于是让用户进行激活,就能避免用户填写一个不可用的邮箱。
传统方法的代码实现:
1)数据库表的设计:
在用户注册的表中添加一个字段:IsActive用来判断激活的状态。
该表用来存放激活码。
代码实现:
BLL层代码:
/// <summary>
/// 2016-08-30
/// 注册的时候看看是否已经存在该用户
/// </summary>
/// <param name="username"></param>
/// <returns></returns>
public T_Users GetByUserName(string username)
{
T_UsersDAL userDal = new T_UsersDAL();
return userDal.GetByUserName(username);
}
/// <summary>
/// 注册的时候看看邮箱是否已经被注册
/// </summary>
/// <returns></returns>
public bool CheckEmailOnReg(string email)
{
T_UsersDAL userDal = new T_UsersDAL();
T_Users user= userDal.CheckEmailOnReg(email);
return user == null;
}
DAL层代码:
/// <summary>
/// 注册时候看看是否已经存在该用户名
/// </summary>
/// <param name="username"></param>
/// <returns></returns>
public T_Users GetByUserName(string username)
{
string sql = "select * from T_Users where UserName=@UserName";
DataTable dt = SqlHelper.ExecuteQuery(sql, new SqlParameter("@UserName", username));
T_Users userInfo = null;
if (dt.Rows.Count > 0)
{
foreach (DataRow dr in dt.Rows)
{
userInfo = RowToUserInfoByDataRow(dr);
}
}
return userInfo;
}
/// <summary>
/// 注册的时候检查用户的邮箱是否被注册
/// </summary>
/// <param name="email"></param>
/// <returns></returns>
public T_Users CheckEmailOnReg(string email)
{
string sql = "select * from T_Users where Email=@Email ";
DataTable dt = SqlHelper.ExecuteQuery(sql, new SqlParameter("@Email",email));
T_Users userInfo = null;