大数据、高并发这是最近一段时间内被IT行业提的最为火热的概念,看过《大数据时代》的同学应该不会陌生大数据的概念,尤其是对于互联网行业来说,大数据是每天都要接触的问题,简单通俗地说,每天得大数据,就给系统的性能带来了新的要求---高并发,有了这样一个技术应用的实际背景,对技术人员就提出了要求,随着java环境下的Hadoop,PHP的Memcached,包括Redis的产生和技术的扩散,我们就开始接触这些应用与大数据高并发领域的架构理念,Memcached基于C语言编写,天生的跨平台,让这个技术很容易产生了Windows平台的版本,.NET环境对Memcached玩转就显得让人兴奋不已了。
我的环境:
Thinkpad T430 I5/2.8GHZ 8G/DDR3
Windows 8 Enterprise X64
首先,下载Memecached服务端安装包,据我所知官方不提供windows版本的安装包,需要自己编译,不过在github上有MSI安装包可以下载。
服务端:http://code.jellycan.com/memcached/
客户端:http://sourceforge.net/projects/memcacheddotnet/
当然还存在一些其它较好的客户端,这里我实现一个分布式缓存实现单点登录的功能,就使用了这个客户端。下载完成后,含exe安装包文件夹解压copy到自定义目录。我的环境中,我把它放到了E盘根目录。命令行安装
完成安装后,使用start命令来启动memcached,这样memcached就会作为一个windows服务进程在运行
服务端运行完成后,可以基本了解一下这个版本的Memcahced在windows平台下的一些基本特性:
Memcached默认使用端口是11211
默认最大连接数是1024个
默认最大使用内存是64M
默认每个键值对,值存储空间为1M
服务端准备工作完成后,我们需要支持进行memcached编程的客户端,对于net技术来说,就是需要支持的DLL,当然,如果对Memcached特别有研究的同学,可以自己写Dll,Memecahed服务端会暴露相应的API供客户端调用,使用Sockt连接来进行数据交互。我使用的是Memcacheddotnetclient_1.1.5的客户端 。
所有的准备工作完成之后,就要进入我们的代码阶段了。打开visual studio新建一个项目(控制台、web、win都可以),然后项目引入客户端DLL就可以进行编程了。为了方便单点登录的Session数据共享的功能,我新建的是Web MVC程序。
程序目录结构:
实现单点登录毫无疑问,首先使用MVC框架建立Login页面
View Login前端
一个密码输入框,一个用户名输入框,简单模拟登录。当用户输入用户名密码之后,进行校验,校验通过将生成SessionID,通过Respons写入客户端,并将用户登录信息存入Memecached,在下次用户直接请求Index页面的时候,首先通过Cookie存入的SessionId查找Memecached,如果查找到并且验证合格则直接跳转到Index,否则继续进入Login要求用户信息验证。
HomeControll代码如下:
[HttpPost] public ActionResult LoginAction(FormCollection values) { string name = values["txtName"]; string password = values["txtPass"]; if (name == myname && password == mypassword) { string sessionId = Guid.NewGuid().ToString(); MemcachHelper.Set(sessionId, name + "$" + password, DateTime.Now.AddDays(1)); Response.Cookies["SessionId"].Value = sessionId; return View("Index"); } return View("Login"); }
使用POST方式提交用户页面信息进行验证,我这里放了2个静态变量,真实的环境中,这个数据应该是从数据库中查询到的。
当用户直接请求非身份验证的页面的时候,我们首先是查找Cookie中是否有我们在登录的时候写入的SessionID,存在SessionId则直接去Memecached拉取前次登录的信息。
代码实现如下:
public ActionResult Index() { if (Request.Cookies["SessionId"] == null || string.IsNullOrEmpty(Request.Cookies["SessionId"].ToString())) { return View("Login"); } else { string key = Request.Cookies["SessionId"].Value.ToString(); string[] arrUserInfo = MemcachHelper.Get(key).ToString().Split('$'); if (arrUserInfo.Length >= 2) { if (arrUserInfo[0] == myname && arrUserInfo[1] == mypassword) { return View("Index"); } return View("Login"); } } return View("Login"); }
实现起来的业务逻辑并不复杂了,这里两次操作了Memecached,所以在Model中加入了一个操作Memecached的帮助类,类代码如下:
public class MemcachHelper { private static MemcachedClient mclient; static MemcachHelper() { string[] serverList = new string[] { "127.0.0.1:11211" }; SockIOPool pool = SockIOPool.GetInstance("First"); pool.SetServers(serverList); pool.Initialize(); mclient = new MemcachedClient(); mclient.PoolName = "test"; mclient.EnableCompression = false; } public static bool Set(string key, object value, DateTime expiry) { return mclient.Set(key, value, expiry); } public static object Get(string key) { return mclient.Get(key); } }
干脆利索的三个功能,由于使用的是静态类的静态方法,所以构造函数中对Memcached进行来了初始化,在类进行静态方法调用的时候,第一次回调用静态构造函数,将Memecached需要进行初始化的信息进行写入。其次,定义了Get和Set两个方法,一个读取,一个写入数据。操作Memecached就这么简单。
这里稍微解释一下静态构造函数中的代码:serverList实际上就是我们说的服务器集群列表,这个列表直接告诉了我们那台服务器,通过那个端口,加入这个memecached集群。建立SockIOPool连接,初始化连接池,并设置相应的过期时间。
相关推荐
**缓存Memcached-1.2.1:深入理解与应用** Memcached是一款高效、轻量级的分布式内存对象缓存系统,广泛应用于Web应用程序中,以减轻数据库负载,提高数据访问速度。在这个版本1.2.1中,我们探讨其核心特性、工作...
`memcached-session-manager`是Java的一个库,用于在基于Tomcat的Web应用中实现基于Memcached的session共享,这在分布式环境中尤为重要。 标题中的"session共享 memcached-session-manager 1.9.6 jar"指的正是这个...
memcached-1.9.6,libevent-2.1.12-stable.tar memcached-session-manager-1.9.6,msm-kryo-serializer-1.9.6.jar,tomcat8.5,实现会话共享
Memcached 是一个高性能、分布式内存对象缓存...总的来说,`memcached-win64-1.4.4-14.zip`为64位Windows用户提供了一个快速部署Memcached的解决方案,使得在Windows环境中也能享受到Memcached带来的高性能缓存服务。
标题"memcached-win32-1.4.4-14.zip"指的是Memcached的Windows 32位版本,版本号为1.4.4,构建编号14。这个压缩包是一个软件分发包,用于在32位Windows系统上部署和运行Memcached。 描述中提到,Memcached是一个...
分布式缓存技术是现代高并发、高性能Web应用中不可或缺的一部分,它们通过将数据存储在内存中,以提高读取速度,降低对数据库的依赖。在众多的缓存解决方案中,Redis和Memcached是最受欢迎的两个选择。本文将深入...
标题提及了两个压缩包文件:`memcached-1.2.1-win32.zip` 和 `java_memcached-release_1.6.zip`。这表明我们正在处理的是与Memcached相关的开发资源,一个是Windows上的Memcached服务器版本1.2.1,另一个是Java...
java-memcached-2.6.6.jar
1. **分布式会话管理**:在高并发的Web环境中,单一服务器的会话管理可能成为瓶颈,memcached-session-manager 提供了解决方案,它将用户的会话数据分布存储在多个 Memcached 服务器上,实现了会话的跨服务器共享,...
1. 解压文件:首先,我们需要对"memcached-1.5.11.tar.gz"进行解压,这通常可以通过tar命令完成,例如`tar -zxvf memcached-1.5.11.tar.gz`。 2. 编译与安装:进入解压后的目录,执行`./configure`进行配置,然后`...
为了优化这个问题,我们可以使用`memcached-session-manager`,它是一个专门为Tomcat设计的插件,使得Tomcat能够将用户的session数据存储在Memcached服务器上,实现session的分布式管理。 本文将详细介绍如何在...
Linux运维-d8企业架构缓存中间件分布式memcached-01学习目标和内容04.mp4
【分布式缓存 Memcached】是企业项目开发中解决本地缓存局限性的一种高效方案。本地缓存虽然在初期能够提供快速的数据访问,但随着缓存数据量的增加,内存消耗也随之增长,可能导致系统运行变慢甚至出现性能瓶颈。...
**Memcached** 是一款高性能、分布式内存对象缓存系统,广泛应用于Web应用中,用于减轻数据库负载,提高数据访问速度。它通过将数据和对象存储在内存中,以快速访问的方式提供服务,而不是每次请求都从数据库中读取...
总结,`memcached-1.5.4`是实现高效缓存的关键组件,其源码的阅读与编译有助于深入理解内存缓存的工作原理,优化Web应用性能。通过熟悉`memcached`的配置、运行以及与其他技术的集成,开发者可以更好地利用此工具来...
memcached的基本设置: -p 监听的端口 -l 连接的IP地址, 默认是本机 -d start 启动memcached服务 -d restart 重起memcached服务 -d stop|shutdown 关闭正在运行的memcached服务 -d install 安装memcached服务 -d ...
在本文中,我们将围绕"memcached-1.2.6-win32-bin.zip"这个压缩包,探讨其核心功能、工作原理,以及如何在Windows环境下安装和使用。 一、Memcached的核心功能 1. 分布式缓存:Memcached基于键值对存储,可将数据...
memcached-1.4.jar memcached-1.4.jar memcached-1.4.jar
Memcached-session-manager使用说明及相关jar包(tomcat7版) 依照文档部署即可实现多服务器多tomcat session共享,jar包中是tomcat7集成所需要的jar包,序列化工具用的是java默认的序列化工具,若要使用其他版本的...
memcache客户端jar包: 1,java_memcached-release_2.6.6.jar 2,commons-pool-1.5.6.jar 3,slf4j-api-1.6.1.jar 4,slf4j-simple-1.6.1.jar