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"); } }
相关文章推荐
- php操作memcache的用法、详解和方法介绍
- 介绍memcache与redis 以及相互之间的比较
- Memcache 介绍与应用场景
- memcache的介绍与应用场景
- Memcahce(MC)系列(一)Memcache介绍、使用、存储、算法、优化
- Memcache技术分享:介绍、使用、存储、算法、优化、命中率
- Memcache 介绍与部署
- 三大缓存框架ehcache、memcache和redis的介绍
- Memcache介绍、安装、使用(一)
- memcache介绍
- Memcache的使用基本介绍
- memcache简单介绍
- memcache简单介绍
- Redis介绍及Redis与Memcache的区别
- memcache 的内存管理介绍和 php实现memcache一致性哈希分布式算法
- MemCache基础知识介绍
- Memcache CAS协议介绍及使用
- memcache的介绍与操作
- 【memcache缓存专题(1)】memcache的介绍与应用场景
- Memcache技术分享:介绍、使用、存储、算法、优化、命中率