Memcache介绍

在有三台机器组成了一个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");
            }
        }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值