HTML5技术

ASP.Net MVC4+Memcached+CodeFirst实现分布式缓存 - 奔跑吧!小郭(2)

字号+ 作者:H5之家 来源:H5之家 2017-01-01 13:00 我要评论( )

本质就是一个大的哈希表。key最大长度是255个字符。 内存模型:Memcache预先将可支配的内存空间进行分区(Slab),每个分区里再分成多个块(Chunk)最大1MB,但同一个分区里:块的长度(bytes)是固定的。插入数据

本质就是一个大的哈希表。key最大长度是255个字符。
内存模型:Memcache预先将可支配的内存空间进行分区(Slab),每个分区里再分成多个块(Chunk)最大1MB,但同一个分区里:块的长度(bytes)是固定的。插入数据时通过一致性哈希算法查找适合自己长度的块,然后插入,会有内存浪费。

为了提高性能,memcached中保存的数据都存储在memcached内置的内存存储空间中。由于数据仅存在于内存中,因此重启memcached、重启操作系统会导致全部数据消失。另外,内容容量达到指定值之后,就基于LRU(Least Recently Used[最近最少使用算法])算法自动删除不使用的缓存。memcached本身是为缓存而设计的服务器,因此并没有过多考虑数据的永久性问题。

3)惰性删除:

它并没有提供监控数据过期的机制,而是惰性的,当查询到某个key数据时,如果过期那么直接抛弃。

4)集群搭建原理:

Memcache服务器端并没有提供集群功能,但是通过客户端的驱动程序实现了集群配置。
客户端实现集群的原理:首先客户端配置多台集群机器的ip和端口的列表。然后客户端驱动程序在写入之前,首先对key做哈希处理得到哈希值后对总的机器的个数进行取余然后就选择余数对应的机器。

5)基于客户端的分布式

6)  基于libevent的事件处理(这就是Memcached为什么这么吊的原因)

libevent是一套跨平台的事件处理接口的封装,能够兼容包括这些操作系统:Windows/Linux/BSD/Solaris 等操作系统的的事件处理。Memcached  使用libevent来进行网络并发连接的处理,能够保持在很大并发情况下,仍旧能够保持快速的响应能力。

 part3:项目实战(demo版)

还记得上面提到的问题吗?如何把用户的状态信息保存起来,共享给这三台服务器?下面通过代码,给大家介绍ASP.Net MVC 4中如何使用Memcached,开始吧!

项目结构:

 

项目中需要引用Memcached的dll,如下:

1、首先准备好工具类:

MemcacheHelper:

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using Memcached.ClientLibrary; WebDemo.Models 8 { MemcacheHelper 10 { MemcachedClient mc; MemcacheHelper() 14 { String[] serverlist = { }; SockIOPool pool = SockIOPool.GetInstance(); pool.SetServers(serverlist); pool.SetWeights(new int[] { 1 }); 24 pool.Initialize(); mc = new MemcachedClient(); ; mc.EnableCompression = false; 30 31 } 插入值 Set(string key, object value,DateTime expiry){ 40 return mc.Set(key, value, expiry); 41 } 获取值 Get(string key) 48 { 49 return mc.Get(key); 50 } 51 } 52 }

View Code

BaseController:

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using WebDemo.Models; namespace WebDemo.Controllers { public class BaseController : Controller { UserInfo LoginUser { get; set; } OnActionExecuting(ActionExecutingContext filterContext) { base.OnActionExecuting(filterContext); sessionId = Request[]; (string.IsNullOrEmpty(sessionId)) { //return RedirectToAction("Login", "Logon"); Response.Redirect(); } object obj = MemcacheHelper.Get(sessionId); UserInfo user = obj as UserInfo; if (user == null) { Response.Redirect(); } LoginUser = user; //实现session的滑动机制 MemcacheHelper.Set(sessionId, user, DateTime.Now.AddMinutes(20)); } } }

View Code

 

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 【第二篇】ASP.NET MVC快速入门之数据注解(MVC5+EF6) - 三生石上

    【第二篇】ASP.NET MVC快速入门之数据注解(MVC5+EF6) - 三生石上

    2016-12-27 13:00

  • 【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6) - 三生石上

    【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6) - 三生石上

    2016-12-23 17:00

  • ASP.NET Aries 入门开发教程6:列表数据表格的格式化处理及行内编辑 - 路过秋天

    ASP.NET Aries 入门开发教程6:列表数据表格的格式化处理及行内编辑

    2016-11-20 16:00

  • 在ASP.NET Core中使用Angular2,以及与Angular2的Token base身份认证 - 微软一站式示

    在ASP.NET Core中使用Angular2,以及与Angular2的Token base身份认证

    2016-11-20 15:00

网友点评
t