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");            }        }


原创粉丝点击