您的位置:首页 > 数据库 > Memcache

Memcache介绍

2013-09-05 11:10 127 查看
在有三台机器组成了一个Web的应用集群,其中一台机器用户登录,然后其他另外两台机器共享登录状态?解决1:AspNet 进程外的Session。
解决2:用数据库存储当前登录状态。
解决3:Memcache【性能最好,类似的:Redis,NoSql】
当你访问量比较大的时候,你还是用session的保存用户信息吗?那你的网站那肯定太悲催了,现在可以用memcache去实现,前面2中方法是微软提供的方法,不过效果都不好。
先讲讲memcache的按照:
1.下下载memcached软件,下载文件:memcached 1.2.1 forWin32 binaries (Dec 23, 2006)
2解压文件到D盘 打开cmd命令 打开安装的文件路径(例如)进行如下操作:
弄不上图片 先文字说下 :就是通过cd 打开文件夹,然后进行注册按照  memcache -d install 到服务中查看memcache是否安装了,然后启动就可以也可以通过命令 memcache -d start  默认监听端口为 11211
下载文件:https://sourceforge.net/projects/memcacheddotnet/
里面有.net1.1  和 .net2.0的两种版本  还有一个不错的例子。
3. 将Commons.dll,ICSharpCode.SharpZipLib.dll,log4net.dll,Memcached.ClientLibrary.dll 等放到bin目录
4. 引用Memcached.ClientLibrary.dll

public readonly static MemcachedClient mc;
static MemcacheHelper()
{
string[] serverlist = { "10.0.0.131:11211", "10.0.0.132:11211" };

//初始化池
SockIOPool pool = SockIOPool.GetInstance();
pool.SetServers(serverlist);

pool.InitConnections = 3;
pool.MinConnections = 3;
pool.MaxConnections = 5;

pool.SocketConnectTimeout = 1000;
pool.SocketTimeout = 3000;

pool.MaintenanceSleep = 30;
pool.Failover = true;

pool.Nagle = false;
pool.Initialize();

// 获得客户端实例
mc = new MemcachedClient();
mc.EnableCompression = false;
}
//定一个获取memcache的值的方法
/// <summary>
/// 定一个获取memcache的值的方法
/// </summary>
/// <param name="key">缓存的键</param>
/// <returns></returns>
public static object GetValue(string key)
{

return mc.Get(key);
}
//添加一个值
/// <summary>
/// 添加一个值
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
/// <returns></returns>
public static bool Insert(string key, object value)
{
mc.Set(key, value);
return true;
}
//添加一个值 并且设置为缓存时间
/// <summary>
/// 添加一个值 并且设置为缓存时间
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
/// <param name="time"></param>
/// <returns></returns>
public static bool Insert(string key, object value, DateTime time)
{
mc.Set(key, value, time);
return true;
}
//删除
/// <summary>
/// 删除缓存中的值
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public static bool Delete(string key)
{
//先判断值是否存在
if (mc.KeyExists(key))
{
mc.Delete(key);
return true;
}
return false;
}
}

//当用户登陆成功后保存用户信息
/// <summary>
/// 当用户登陆成功后保存用户信息
/// </summary>
/// <param name="model"></param>
public void SaveUserInfo(Model.Users model)
{
//创建一个唯一标识的标识 用来充当session_id
Guid guid = Guid.NewGuid();
Response.Cookies["SessionID"].Value = guid.ToString();//把模仿的session_id保存到用户浏览器的内存中 当关闭浏览器就消失
//保存用户信息
Common.MemcacheHelper.Insert(guid.ToString(), model, DateTime.Now.AddMinutes(20));
}

//判断用户名密码
private void CheckLogin()
{
//string cookie
string name = Request.Form["txtName"];
string pwd = Request.Form["txtPwd"];

string msg;
Users users;
string regxName = @"^[a-zA-Z][a-zA-Z0-9]{3,15}";
if (!Regex.IsMatch(name, regxName))
{
//说明匹配不成功
Response.Write("用户名格式不正确");
return;
}
//密码这里就不验证了
//这里还要记住登陆状态

if (bll.GetModel(name, pwd, out msg, out users))
{
//说明登陆成功 保存登陆状态
//Session["Users"] = users;
//从memcache中取出值 写一个方法
SaveUserInfo(users);
if (!string.IsNullOrEmpty(Request.Form["cheUser"]))
{
//把用户信息保存到cookie中
HttpCookie cookie1 = new HttpCookie("name", name);
HttpCookie cookie2 = new HttpCookie("pwd", Encod(pwd));
//设置过期时间
cookie1.Expires = DateTime.Now.AddDays(7);
cookie2.Expires = DateTime.Now.AddDays(7);
//添加到cookie中
Response.Cookies.Add(cookie1);
Response.Cookies.Add(cookie2);

}
GoToPage(msg);
}
else
{
Response.Redirect("/ShowMsg.aspx?msg=" + Server.UrlEncode(msg) + "&txt=" + Server.UrlEncode("登陆界面") + "&url=/Member/Login.aspx");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: