Memcache介绍
来源:互联网 发布:人才测评软件 编辑:程序博客网 时间:2024/05/20 08:42
在有三台机器组成了一个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.dllpublic 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"); } }