using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using WebDemo.Models; namespace WebDemo.Controllers { public class LogonController : Controller { ActionResult Index() { return View(); } public ActionResult Login(UserInfo user) { //创建一个DbContext对象,这样写不是很合理,先留个问题。(使用EF的code-first时需要注意的点) SchoolDbContext dbContext =new SchoolDbContext(); var loginUser = dbContext.UserInfo.Where(u => u.UName.Equals(user.UName) && u.UPwd.Equals(user.UPwd)).FirstOrDefault(); if (loginUser == null) { ); } else { Guid sessionId = Guid.NewGuid();//申请了一个模拟的GUID:SessionId //把sessionid写到客户端浏览器里面去了(一定要把sessionid写到客户端,这样用户在访问其他web资源的时候,就会把cookie中的信息传给服务器,然后通过sessionid的key到Memcached中去取对应的值) Response.Cookies[].Value = sessionId.ToString(); //再把用户的信息插入到Memcached中 MemcacheHelper.Set(sessionId.ToString(), loginUser, DateTime.Now.AddMinutes(20)); ); } } public ActionResult ValidateCode() { ValidateCodeHelper helper =new ValidateCodeHelper(); string strCode = helper.CreateValidateCode(4); Session[] = strCode; var byteData = helper.CreateValidateGraphic(strCode); ); } } }
View Code到这里利用ASP.Net MVC4、EF(code-first)、Memcached实现分布式缓存的功能基本完成了,功能很简单,但是很值得大家体会这里面的思想。最后,为了大家好理解如何实现分布式缓存,我把demo版本的流程再给大家梳理一遍,希望对你有用。
图一:客户端是如何把数据插入到服务器端的:
图二:demo版流程:
最后再补充一点:
1.1 memcached的数据生命周期
当一个键值对存放到mem中,在以下情况将会被销毁
(1) 时间到(生命周期从存放时就开始计算)
(2) 你使用delete函数,删除 flush_all
(3) 重启mem服务
(4) 重启系统
1.2 memcached插入数据的原则(说的不全,希望大家多多包涵)
(1) 变化频繁,具有不稳定性的数据,不需要实时入库。(比如在线人数,在线状态,用户评分)
(2) 门户网站的新闻,觉得页面静态化不能满足需求,可以放入到mem中。(配合JQuery的AJAX请求)
1.3 什么样的数据不适合放入memcached中
(1)过大的数据、特别重要的数据
需要代码的,请在评论区留下邮箱,谢谢。如果觉得好话,希望大家推荐一下哈~~~
注:转载请注明作者,谢谢。