MemCached配置与缓存知识概述
先看看百度百科里面对缓存的介绍:
缓存(Cache memory)是硬盘控制器上的一块内存芯片,具有极快的存取速度,它是硬盘内部存储和外界接口之间的缓冲器。由于硬盘的内部数据传输速度和外界介面传输速度不同,缓存在其中起到一个缓冲的作用。缓存的大小与速度是直接关系到硬盘的传输速度的重要因素,能够大幅度地提高硬盘整体性能。当硬盘存取零碎数据时需要不断地在硬盘与内存之间交换数据,有大缓存,则可以将那些零碎数据暂存在缓存中,减小系统的负荷,也提高了数据的传输速度。
这个是介绍了电脑的硬盘缓存..当然,电脑里面包括很多种缓存,不是本文重点.我们主要关注这段话的几个关键点:速度,性能,减小系统的负荷,这就是缓存的优点.
ASP.NET缓存概述:
通常,应用程序可以将那些频繁访问的数据,以及那些需要大量处理时间来创建的数据存储在内存中,从而提高性能。 例如,如果应用程序使用复杂的逻辑来处理大量数据,然后再将数据作为用户频繁访问的报表返回,避免在用户每次请求数据时重新创建报表可以提高效率。 同样,如果应用程序包含一个处理复杂数据但不需要经常更新的页,则在每次请求时服务器都重新创建该页会使工作效率低下。
在这些情况下,为了帮助您提高应用程序的性能,ASP.NET 使用两种基本的缓存机制来提供缓存功能。 第一种机制是应用程序缓存,它允许您缓存所生成的数据,如 DataSet 对象或自定义报表业务对象。 第二种机制是页输出缓存,它保存页处理输出,并在用户再次请求该页时,重用所保存的输出,而不是再次处理该页。(摘自MSDN)
缓存适用范围:
1.频繁访问的数据
原因:提高性能.应用程序使用复杂的逻辑来处理大量数据,然后再将数据作为用户频繁访问的报表返回,避免在用户每次请求数据时重新创建报表可以提高效率。2.需要大量处理时间来创建的数据
原因:提高性能.如果应用程序包含一个处理复杂数据但不需要经常更新的页,则在每次请求时服务器都重新创建该页会使工作效率低下。
ASP.NET缓存应用:
ASP.NET中通过Cache来管理应用程序缓存,也提供了对页面的缓存.
1,页面输出缓存:缓存整个页面,用户请求时不通过页面处理的生命周期,直接从内存中读取.主要用于一些不经常修改的页面,或者需要大量处理编译的页面有用.
2,页面部分输出缓存:缓存部分页面,也就是缓存用户控件(.ascx).
3,应用程序缓存:提供一种编程的方式来实现缓存,通过键值对的形式将任意数据存放到内存中,应用程序缓存是易丢失的,使用应用程序缓存的模式是,确定在访问某一项时该项是否存在于缓存中,如果存在,则使用。如果该项不存在,则可以重新创建该项,然后将其放回缓存中。这一模式可确保缓存中始终有最新的数据。
4,缓存依赖:Net 2.0引入的自定义缓存依赖项,特别是基于MS-SQL Server的SqlCacheDependency特性,使得我们可以避免“数据过期”的问题,它能够根据数据库中相应数据的变化,通知缓存,并移除那些过期的数据,可以参考我的一篇博文配置缓存依赖ASP.NET 下SQLServer2005 缓存依赖
缓存有它的优势和劣势,在使用时候应该视情况而用,在项目前期应预留缓存接口,在项目后期应该做性能优化加上缓存.
下面进入本文主题Memcached
对于一个新的应用我们开发者主要关心,它是什么,它能做什么,它有什么优势和劣势.怎么用..
Memcached是什么
Memcached是高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。
Memcached能做什么
通过在内存里维护一个统一的巨大的hash表,Memcached能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。
Memcached的优势和劣势
Memcache非常快,Memcached使用了libevent(如果可以的话,在linux下使用epoll)来均衡任何数量的打开链接,使用非阻塞的网络I/O,对内部对象实现引用计数(因此,针对多样的客户端,对象可以处在多样的状态), 使用自己的页块分配器和哈希表, 因此虚拟内存不会产生碎片并且虚拟内存分配的时间复杂度可以保证为O(1).。
Memcached的缓存是一种分布式的,可以让不同主机上的多个用户同时访问, 因此解决了共享内存只能单机应用的局限,更不会出现使用数据库做类似事情的时候,磁盘开销和阻塞的发生。当然Memcached也可以用在本地,但是相对于asp.net Cache那太不划算了.
现在比较常用的Mysql数据库,mysql默认开启了查询缓存,当数据表更新时,查询缓存会被更新,如果频繁的发生这种更新会导致查询缓存效率非常低下.如果mysql数据库量不大,可以使用mysql查询缓存,否则Memcached更合适.
还有一种共享内存方式,多个进程或者线程共享同一个缓存.虽然效率提高了不少,但是毕竟只能局限在一台机子上.
因为Memcached也是内存管理,所以也易丢失,理论Memcached可以达到并发的最大连接数是是200,这个数值应该可以调整,也取决于机器的配置.因为Memcached是分布式的,所以它的最大瓶颈在于网络连接.
Memcached怎么使用
1,windows下安装Memcached
Memcached当前版本是1.2.6 下载地址
服务的启动:
1, 将memcached-1.2.1-win32.zip解决到指定的地方,如e:\memcached
2 命令行输入 'e:\memcached\memcached.exe -d install'
3 命令行输入 'E:\memcached\memcached.exe -d start' ,该命令启动 Memcached,默认监听端口为 11211
2,Ubuntu 下安装Memcached
启动终端,在终端下输入
sudo apt-get install memcached
现在安装成功后启动服务,
memcached -d -u root
具体的命令请参考下面的说明
常用设置:
-p <num> 监听的端口
-l <ip_addr> 连接的IP地址, 默认是本机
-d start 启动memcached服务
-d restart 重起memcached服务
-d stop|shutdown 关闭正在运行的memcached服务
-d install 安装memcached服务
-d uninstall 卸载memcached服务
-u <username> 以<username>的身份运行 (仅在以root运行的时候有效)
-m <num> 最大内存使用,单位MB。默认64MB
-M 内存耗尽时返回错误,而不是删除项
-c <num> 最大同时连接数,默认是1024
-f <factor> 块大小增长因子,默认是1.25
-n <bytes> 最小分配空间,key+value+flags默认是48
-h 显示帮助
.NET客户端工具有好多种,我用的是http://sourceforge.net/projects/memcacheddotnet/
运行以下代码测试一下.
static void Main(string[] args)
{
string[] serverlist = { "192.168.0.129:11211" };
//初始化池
SockIOPool sock = SockIOPool.GetInstance();
sock.SetServers(serverlist); sock.InitConnections = 3;
sock.MinConnections = 3;
sock.MaxConnections = 5; sock.SocketConnectTimeout = 1000;
sock.SocketTimeout = 3000; sock.MaintenanceSleep = 30;
sock.Failover = true; sock.Nagle = false;
sock.Initialize(); //获取客户端实例 MemcachedClient memcached = new MemcachedClient();
memcached.EnableCompression = false; Console.WriteLine("-------Memcached测试-------");
memcached.Set("key1", "Value1");
if (memcached.KeyExists("key1"))
{
Console.WriteLine("存在key1..");
Console.WriteLine(memcached.Get("key1").ToString());
}
else
{
Console.WriteLine("不存在key1键");
} Console.Read();
SockIOPool.GetInstance().Shutdown(); //关闭池, 关闭sockets
}
我在虚拟机里面装的Ubuntu,IP是192.168.0.192.运行成功以后代码之后说明Memcached配置成功.
后续再详细介绍.net下操作Memcached…
MemCached配置与缓存知识概述的更多相关文章
- [转载]WEB缓存技术概述
[原文地址]http://www.hbjjrb.com/Jishu/ASP/201110/319372.html 引言 WWW是互联网上最受欢迎的应用之一,其快速增长造成网络拥塞和服务器超载,导致客户 ...
- Magento 架构基础知识概述
Megento 架构基础知识概述 Magento整合了面向对象的基于PHP的应用程序的核心架构原则.这些一般原则的综合讨论既有在线的,也有印刷形式.以下讨论主要关注这些主题如何直接应用于Magento ...
- Web开发人员需知的Web缓存知识
最近的译文距今已有4年之久,原文有一定的更新.今天踩着前辈们的肩膀,再次把这篇文章翻译整理下.一来让自己对web缓存的理解更深刻些,二来让大家注意力稍稍转移下,不要整天HTML5, 面试题啊叨啊叨的~ ...
- 缓存知识整理(包含Redis)
一.缓存知识 1.buffer和cache的区别 Buffer 缓冲 写操作 写缓冲 Cache 缓存 读操作 读缓存 磁盘-->内存-->CPU 2.PHP的缓存方案 官方文档:h ...
- MySQL缓存命中率概述及如何提高缓存命中率
MySQL缓存命中率概述 工作原理: 查询缓存的工作原理,基本上可以概括为: 缓存SELECT操作或预处理查询(注释:5.1.17开始支持)的结果集和SQL语句: 新的SELECT语句或预处理查询语句 ...
- Web 开发人员需知的 Web 缓存知识
今天踩着前辈们的肩膀,再次把这篇文章翻译整理下.一来让自己对web缓存的理解更深刻些,二来让大家注意力稍稍转移下,不要整天HTML5, 面试题啊叨啊叨的~~ 什么是Web缓存,为什么要使用它? Web ...
- 你有自己的Web缓存知识体系吗?
赵舜东 江湖人称赵班长,曾在武警某部负责指挥自动化的架构和运维工作,2008年退役后一直从事互联网运维工作.曾带团队负责国内某电商的运维工作,<saltstack入门与实践>作者,某学院高 ...
- 开发人员需知的Web缓存知识(转)
什么是Web缓存,为什么要使用它? 缓存的类型: 浏览器缓存: 代理服务器缓存: 网关缓存: Web缓存无害吗?为什么要鼓励缓存? Web缓存如何工作 如何控制缓存和不缓存: HTML Meta标签 ...
- 【转】nginx+memcached构建页面缓存应用
如需转载请注明出处: http://www.ttlsa.com/html/2418.html nginx的memcached_module模块可以直接从memcached服务器中读取内容后输出,后续的 ...
随机推荐
- swift 字符转为类,代码创建控件
在使用类之前要先获得 命名空间 通过json来获取 字符型的类名 然后创建类对象,这时候就要用到字符转类 // 从info字典中获取到 命名空间 转为字符型 let NS = NSBundle.mai ...
- iOS开发融云即时通讯集成详细步骤
1.融云即时通讯iOS SDK下载地址 http://rongcloud.cn/downloads 选择iOS SDK下载 2.进行应用开发之前,需要先在融云开发者平台创建应用,如果您已经注 ...
- 所有Mac用户都需要知道的9个实用终端命令行
通常情况下,只有高端用户才会经常用到终端应用.这并不意味着命令行非常难学,有的时候命令行可以轻松.快速的解决问题.相信所有Mac用户都尝试过命令行,今天为大家带来9个非常实用的命令行操作.一些命令行需 ...
- android intent 5.1
1.intent 6 items action, data(uri &type),Component name,Extras,flags 2.data---uri & type 不管使 ...
- mysql中count(),group by使用
count()统计表中或数组中记录 count(*)返回检索行的数目,且不论其值中是否包含NULL count(column_name)返回的是对列中column_name不为NULL的行的统计 例如 ...
- selenium如何解决window安全验证问题
解决办法 IE浏览器: 1.使用autoit,捕捉到控件后,编写au3脚本,生成exe,然后java调用exe au3脚本 Dim $account = "username" Di ...
- POJ 2449 Remmarguts' Date --K短路
题意就是要求第K短的路的长度(S->T). 对于K短路,朴素想法是bfs,使用优先队列从源点s进行bfs,当第K次遍历到T的时候,就是K短路的长度. 但是这种方法效率太低,会扩展出很多状态,所以 ...
- HDU 1394 & ZOJ 1484 Minimum Inversion Number
(更新点查询区间) 这题重在想到,写代码很容易了..这题是利用线段树求逆序数,不按给定的顺序建树,而是有序地插入.比如每插入一个数,就统计之前插入的那些数里比他大的有多少个,这个数就是此时的逆序数,然 ...
- 阿里巴巴Druid数据源,史上最强的数据源,没有之一
目前常用的数据源主要有c3p0.dbcp.proxool.druid,先来说说他们Spring 推荐使用dbcp:Hibernate 推荐使用c3p0和proxool1. DBCP:apacheDBC ...
- C/C++学习----C语言简介
[开发环境] 物理机版本:Win 7 旗舰版(64位) IDE版本:Visual Studio 2013简体中文旗舰版(cn_visual_studio_ultimate_2013_with_upda ...