应用系统都将数据保存在关系数据库中,应用服务器从中读取数据并在浏览器中显示。 但随着数据量的增大、用户访问的集中,就会出现DB的负担加重、应用系统延迟等重大影响。 制约高并发访问的因素往往是读写性能较慢的IO,为了提高应用程序的访问性能,将一些常用的数据缓存在内存中可以大幅度提高访问效率。
在.NET中提供了一个Cache类可以实现这些功能, 如ASP.NET中的HttpContext 对象,微软也封装了Cache Enterprise Library来解决基本的缓存问题。 在大部分情况下我们都可以使用Cache类来提高.NET的性能,但是使用Cache类也有一些不足,比如我们不能指定Cache类所占用的内存的大小。其次,针对大型Web站点我们需要缓存大量数据,因此需要将Cache中缓存的数据移到另一台机器,甚至多台专用缓存服务器上,即使用分布式缓存方案。 分布式缓存的特点是缓存的数据不必和应用程序在同一台机器上,从而大大增强了缓存数据的复用性。
memcached是一个免费开源、高性能、分布式内存缓存系统,用于大型Web站点的性能优化提升,减少DB及文件系统的访问压力。 memcached是高性能的分布式内存缓存服务器。 一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。
Memcached是一个基于Key-value键值存储模型。 由于使用了高效Key的hash算法来设计存储数据结构,并且设计了精心的内存分配器,所以查询性能非常高,时间复杂度达到O(1),即无论你存储多少数据项,查询任何数据定位的时间都一样高效,不会有任何变化。
目前有多种平台的Memcached版本,比如Linux、FreeBSD、Solaris 、Mac OS X及Windows平台。
可在官网下载到最新版本: http://memcached.org/ (LINUX) 。 这里,我们安装Windows版本来演示。Windows版本安装步骤为:
1) 下载memcache for windows。下载地址:http://download.csdn.net/detail/tinysoft/5521891 ,解压到d:\memcached。
2) 在命令行状态下输入: d:\memcached\memcached.exe -d install 。至此memcached已经安装成windows服务
3) 在命令行下输入: d:\memcached\memcached.exe -d start 以启动memcached服务。当然也可以选择在windows服务中启动。
安装后可以指定Memcached监听的端口和最大内存大小。如果缓存的数据大小超过指定内存,那么Memcached就会按照LRU算法将最近不常访问的数据项淘汰掉。新增的缓存数据就可以使用这些标记为失效的数据所占用的内存,就不会导致memcached内存不够的问题。此外,为了提高性能,在缓存数据过期后Memcached并不是从物理内存中删除缓存的数据,仅仅在取出更改数据缓存时检查它是否已过期。
⊃2; DOS以命令行启动Memcached: memcached.exe -p 11211 -m 512 (端口11211,内存512M)。
⊃2; DOS命令行查看memcached状态:telnet localhost 11211 (输入命令stats)
Memcached命令大全:
1:
<!--CRLF-->
2: -p 监听的端口
<!--CRLF-->
3: -l 连接的IP地址, 默认是本机
<!--CRLF-->
4: -d start 启动memcached服务
<!--CRLF-->
5: -d restart 重起memcached服务
<!--CRLF-->
6: -d stop|shutdown 关闭正在运行的memcached服务
<!--CRLF-->
7: -d install 安装memcached服务
<!--CRLF-->
8: -d uninstall 卸载memcached服务
<!--CRLF-->
9: -u 以的身份运行 (仅在以root运行的时候有效)
<!--CRLF-->
10: -m 最大内存使用,单位MB。默认64MB
<!--CRLF-->
11: -M 内存耗尽时返回错误,而不是删除项
<!--CRLF-->
12: -c 最大同时连接数,默认是1024
<!--CRLF-->
13: -f 块大小增长因子,默认是1.25
<!--CRLF-->
14: -n 最小分配空间,key+value+flags默认是48
<!--CRLF-->
15: -h 显示帮助
<!--CRLF-->
有很多.NET版本的Memcached客户端程序,Memcached .NET客户端:
1) enyim.com Memcached Client
下载地址:http://nuget.org/packages/EnyimMemcached/
2) NET memcached client library
下载地址:https://sourceforge.net/projects/memcacheddotnet
3) Memcached Providers
下载地址:http://www.codeplex.com/memcachedproviders
4) BeIT Memcached
下载地址:http://code.google.com/p/beitmemcached/
我们也可以用NuGet包直接安装,在包管理器中搜索:enyim,安装之。
1.5.3. Enyim.Cachine Memcached配置
在项目中使用Memcached,添加Enyim.Caching.dll引用。更改config配置Memcached:
1: <configSections>
<!--CRLF-->
2:
<!--CRLF-->
3: <sectionGroup name="enyim.com">
<!--CRLF-->
4:
<!--CRLF-->
5: <section name="memcached" type="Enyim.Caching.Configuration.MemcachedClientSection, Enyim.Caching" />
<!--CRLF-->
6:
<!--CRLF-->
7: </sectionGroup>
<!--CRLF-->
8:
<!--CRLF-->
9: <section name="memcached" type="Enyim.Caching.Configuration.MemcachedClientSection, Enyim.Caching" />
<!--CRLF-->
10:
<!--CRLF-->
11: </configSections>
<!--CRLF-->
12:
<!--CRLF-->
13: <enyim.com>
<!--CRLF-->
14:
<!--CRLF-->
15: <memcached>
<!--CRLF-->
16:
<!--CRLF-->
17: <servers>
<!--CRLF-->
18:
<!--CRLF-->
19: <!-- put your own server(s) here-->
<!--CRLF-->
20:
<!--CRLF-->
21: <add address="huhm" port="11211" />
<!--CRLF-->
22:
<!--CRLF-->
23: <!--<add address="huhm2" port="20004" />-->
<!--CRLF-->
24:
<!--CRLF-->
25: </servers>
<!--CRLF-->
26:
<!--CRLF-->
27: <socketPool minPoolSize="10" maxPoolSize="100" connectionTimeout="00:00:10" deadTimeout="00:02:00" />
<!--CRLF-->
28:
<!--CRLF-->
29: </memcached>
<!--CRLF-->
30:
<!--CRLF-->
31: </enyim.com>
<!--CRLF-->
32:
<!--CRLF-->
33: <memcached keyTransformer="Enyim.Caching.TigerHashTransformer, Enyim.Caching">
<!--CRLF-->
34:
<!--CRLF-->
35: <servers>
<!--CRLF-->
36:
<!--CRLF-->
37: <add address="huhm" port="11211" />
<!--CRLF-->
38:
<!--CRLF-->
39: <!--<add address="huhm2" port="20004" />-->
<!--CRLF-->
40:
<!--CRLF-->
41: </servers>
<!--CRLF-->
42:
<!--CRLF-->
43: <socketPool minPoolSize="2" maxPoolSize="100" connectionTimeout="00:00:10" deadTimeout="00:02:00" />
<!--CRLF-->
44:
<!--CRLF-->
45: </memcached>
<!--CRLF-->
46:
<!--CRLF-->
需要分布式缓存的对象需要序列化,在.Net中对实体加上 [Serializable]标记。
1: [Serializable]
<!--CRLF-->
2:
<!--CRLF-->
3: public class Article
<!--CRLF-->
4:
<!--CRLF-->
5: {
<!--CRLF-->
6:
<!--CRLF-->
7: public long Article_ID { get; set; }
<!--CRLF-->
8:
<!--CRLF-->
9: public string Title { get; set; }
<!--CRLF-->
10:
<!--CRLF-->
11: public DateTime Date_Created { get; set; }
<!--CRLF-->
12:
<!--CRLF-->
13: public bool Draft { get; set; }
<!--CRLF-->
14:
<!--CRLF-->
15: public string Content { get; set; }
<!--CRLF-->
16:
<!--CRLF-->
17: }
<!--CRLF-->
1: //by tinyhu,2013
<!--CRLF-->
2:
<!--CRLF-->
3: public List<Article> GetAllFromMemcached()
<!--CRLF-->
4:
<!--CRLF-->
5: {
<!--CRLF-->
6:
<!--CRLF-->
7: List<Article> lstArticle = memCachedClient.Get<List<Article>>("LstArticle");
<!--CRLF-->
8:
<!--CRLF-->
9: if (lstArticle == null)
<!--CRLF-->
10:
<!--CRLF-->
11: {
<!--CRLF-->
12:
<!--CRLF-->
13: lstArticle = this.ArticleDao.GetAll().ToList();
<!--CRLF-->
14:
<!--CRLF-->
15: memCachedClient.Store(Enyim.Caching.Memcached.StoreMode.Add, "LstArticle", lstArticle);
<!--CRLF-->
16:
<!--CRLF-->
17: }
<!--CRLF-->
18:
<!--CRLF-->
19: return lstArticle;
<!--CRLF-->
20:
<!--CRLF-->
21: }
<!--CRLF-->
22:
<!--CRLF-->
23: //by tinyhu,2013
<!--CRLF-->
24:
<!--CRLF-->
25: public string GetMyBlog(long questionId)
<!--CRLF-->
26:
<!--CRLF-->
27: {
<!--CRLF-->
28:
<!--CRLF-->
29: string cacheKey = GetCacheKey(questionId);
<!--CRLF-->
30:
<!--CRLF-->
31: string body = cacheService.Get<string>(cacheKey);
<!--CRLF-->
32:
<!--CRLF-->
33: if (body == null)
<!--CRLF-->
34:
<!--CRLF-->
35: {
<!--CRLF-->
36:
<!--CRLF-->
37: DiscussQuestion question = Database.SingleOrDefault<DiscussQuestion>(questionId);
<!--CRLF-->
38:
<!--CRLF-->
39: body = question.Body ?? string.Empty;
<!--CRLF-->
40:
<!--CRLF-->
41: cacheService.Add(cacheKey, body, CachingExpirationType.SingleObject);
<!--CRLF-->
42:
<!--CRLF-->
43: }
<!--CRLF-->
44:
<!--CRLF-->
45: return body;
<!--CRLF-->
46:
<!--CRLF-->
47: }
<!--CRLF-->
48:
<!--CRLF-->
使用Memcached分布式缓存可以大大提高应用程序的性能, 根据经验Memcached可以将单台服务器的并发访问效率提升了几十~数百倍(我在本机测试性能提升500倍)。
1.6. 缓存策略
当然,在实际应用系统中需要考虑缓存策略,缓存什么时候过期,如何对实体进行缓存,如何保证与数据库的同步。(待续 …)
相关推荐
【标题】"memcached 在ASP.NET[最终版]" 指的是将memcached缓存系统应用于ASP.NET开发的场景,这是提高Web应用程序性能的一种常见策略。...通过学习和实践,开发者可以有效地提升其ASP.NET应用的服务质量和用户体验。
总之,`.NET分布式缓存Memcached从入门到实战源码下载`这个资源提供了一个全面的学习平台,涵盖了Memcached的使用、集成、测试等方面,帮助开发者深入理解如何在.NET环境中高效地利用分布式缓存提升应用性能。...
这个压缩包包含了基于.NET的Memcached实例源码和DLL,以及相关的PPT介绍,是学习和理解Memcached在.NET环境下的应用的宝贵资源。 首先,我们来详细了解一下Memcached的基本概念。Memcached是一个简单的键值存储系统...
修改Common/DB_Info.cs下查询语句, 改成你数据库中任意的表就行 cmd.CommandText = "select top 100 * from UM_Function order by FuncID"; 3.检查是否为缓存方法: 运行程序后,第一次加载数据,会将数据存入...
1. **Global.asax**: ASP.NET应用程序的全局应用程序文件,可能包含了应用程序启动时的初始化代码,如注册memcached客户端。 2. **MemeCache.aspx**: 这是一个ASP.NET页面,很可能展示了如何在用户界面中使用...
通过引用这个库,开发人员可以轻松地在他们的.NET应用程序中集成Memcached功能。 封装成一个单例类是软件设计模式中的一种常见实践,目的是为了确保一个类只有一个实例,并提供一个全局访问点。在.NET中,Memcached...
通过合理配置和使用,.NET开发者可以轻松地在应用程序中集成Memcached,提升系统的缓存能力和响应速度。同时,由于Memcached的跨平台特性,Enyim.Caching还可以与Java等其他语言的客户端实现无缝对接。
4. **配置memcached**:配置包括安装memcached服务(如Windows版的Memcached for Windows),设置服务器地址,以及在ASP.NET应用程序的web.config文件中配置客户端连接。 5. **使用示例**:在ASP.NET MVC或Web ...
.NET Memcached 分布式缓存应用类库是用于在.NET环境中高效实现分布式缓存功能的工具,它基于开源的Memcached系统,旨在提高应用程序的数据访问速度和减轻数据库服务器的压力。Memcached是一个高性能、分布式内存...
**Memcached .NET** Memcached .NET 是一个针对.NET Framework 和.NET Core 开发的客户端库,用于与Memcached服务器...正确使用和理解Memcached .NET 的功能和工作原理,将有助于构建更健壮、高性能的.NET应用程序。
MemCached是一种高性能、分布式内存对象缓存系统,用于在分布式...通过实践,可以优化应用程序的性能,特别是在大数据量和高并发场景下。同时,注意监控和调整Memcached的配置参数,以适应不同的应用需求和硬件资源。
ASP.NET应用程序可以配置在多台服务器上运行,通过负载均衡器分配流量,确保没有单点故障,并优化资源利用率。 6. **事务管理**:在分布式系统中,跨多个数据库或服务的事务一致性至关重要。ASP.NET支持分布式事务...
.NET 平台下的 Memcached 客户端实现了对 Memcached 服务器的访问和操作。本文将详细介绍如何使用 .NET C# 语言实现 Memcached 缓存获取所有缓存键的方法步骤。 Memcached 缓存获取所有缓存键的方法步骤 1. 安装...
通过以上步骤,你就可以在ASP.NET应用程序中成功集成并使用MemCached作为缓存系统了。请确保在生产环境中根据实际需求调整Memcached服务的配置,如增加服务器、调整内存分配等,以达到最佳性能和稳定性。同时,持续...
总的来说,"memcached_1.4.13(win64&32)_client2.12"压缩包为Windows用户提供了全面的memcached支持,无论你是想搭建服务端还是在.NET应用程序中使用memcached,这个工具包都能满足你的需求。通过高效的数据缓存,你...
在本文中,我们将深入探讨如何在C# ASP.NET项目中使用Memcached客户端进行缓存操作。Memcached是一种高性能、分布式内存对象缓存系统,广泛应用于缓解数据库负载,提高Web应用程序的响应速度。以下是一个关于如何...
5. **集成Memcached到ASP.NET**: 这个项目的目标是将Memcached缓存系统无缝集成到ASP.NET应用中,使得开发者可以方便地在C#代码中使用Memcached的功能,如添加、删除、更新缓存项,以及执行分布式缓存操作。...
在.NET框架下创建一个分布式Web应用程序是一个复杂但高效的过程,涉及到多个技术和概念。分布式Web应用程序是一种设计模式,其中多个服务器和组件协同工作以提供单一、统一的服务。这通常包括负载均衡、数据分布式...
MemcachedProviders for .NET 2.0 是一个专为.NET Framework 2.0设计的Memcache客户端库,它提供了方便的方式来集成Memcache服务到.NET应用程序中。 MemcachedProviders的基本工作原理是将数据存储在内存中,而...