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配置与缓存知识概述相关推荐
- 安装Memcached及Memcached配置
一.安装Memcached及Memcached配置和状态查询 要想使用Memcached做缓存首先需要安装Memcached服务,安装方法如下: 1. 下载Memca ...
- IPv6知识概述 - ND协议
IPv6知识概述 - ND协议 ND协议功能概述 ND(Neighbor Discovery,邻居发现)协议是IPv6的一个关键协议,它综合了IPv4中的ARP,ICMP路由发现和ICMP重定向等协议 ...
- mysql query cache 命中率_MySQL缓存命中率概述及如何提高缓存命中率
MySQL缓存命中率概述 工作原理: 查询缓存的工作原理,基本上可以概括为: 缓存SELECT操作或预处理查询(注释:5.1.17开始支持)的结果集和SQL语句: 新的SELECT语句或预处理查询语句 ...
- 开发人员需知的Web缓存知识(转)
什么是Web缓存,为什么要使用它? 缓存的类型: 浏览器缓存: 代理服务器缓存: 网关缓存: Web缓存无害吗?为什么要鼓励缓存? Web缓存如何工作 如何控制缓存和不缓存: HTML Meta标签 ...
- (转载)Web 开发人员需知的 Web 缓存知识
什么是Web缓存,为什么要使用它? Web缓存游走于服务器和客户端之间.这个服务器可能是源服务器(资源所驻留的服务器Add),数量可能是1个或多个:这个客户端也可能是1个或多个.Web缓存就在服务器- ...
- 浏览器缓存知识小结及应用
器缓存,也就是客户端缓存,既是网页性能优化里面静态资源相关优化的一大利器,也是无数web开发人员在工作过程不可避免的一大问题,所以在产品开发的时候我们总是想办法避免缓存产生,而在产品发布之时又在想策略 ...
- 实验管理员掌握的计算机知识,计算机应用基础知识概述试验.DOC
计算机应用基础知识概述试验 第1章 计算机应用基础知识概述实验 实验1.1 键盘指法练习及汉字输入 [实验目的与要求] 熟悉键盘布局及各键的功能. 掌握正确的键盘指法. 学会拼音输入法或五笔字型输入法 ...
- IPv6知识概述 - IPv6地址
IPv6知识概述 - IPv6地址 IPv6地址表示 根据RFC4291,IPv6地址有3中格式:首选格式,压缩表示和内嵌IPv4地址的IPv6地址表示. 首选格式 IPv6的地址长度是128位(bi ...
- 运维派 » 你有自己的Web缓存知识体系吗?
你有自己的Web缓存知识体系吗? 赵舜东:江湖人称赵班长,曾在武警某部负责指挥自动化的架构和运维工作,2008年退役后一直从事互联网运维工作.曾带团队负责国内某电商的运维工作,<saltstac ...
最新文章
- Linux下使用Vim粘贴文本错乱问题解决
- hashmap允许null键和值吗_hashMap底层源码浅析
- 隐藏基于对话框的MFC应用程序窗口的方法
- 如何选择SSL 证书服务
- class没有发布到tomcat_面试官扎心一问:Tomcat 在 SpringBoot 中是如何启动的?
- 客户端支持的cookie
- 10个Linux 系统性能监控命令行工具
- Hadoop学习笔记—8.Combiner与自定义Combiner
- 一起学习C语言:数组(三)
- galera mysql cluster
- Tensorflow_gpu安装的坑
- eclipse插件开发(二) 简易4页签编辑器(源码 | 设计 | JS | CSS)配色
- SSM框架之Spring MVC(一)
- 如何实现手动指定AOP实现JDK代理模式到CGLIB的更改?
- python安装pygame教程_Pygame安装教程
- php对联广告代码,网站漂浮对联广告代码
- 将一个文件伪装在另一个文件下
- 迪文串口屏幕通信问题
- C Primer Plus 第5章 运算符、表达式和语句 5.3 其他运算符
- 计算机网络论文作业,论文作业-计算机网络.doc
热门文章
- C语言用warshall算法求传递闭包transitive closure(附完整源码)
- QT的QItemModelBarDataProxy类的使用
- QT的QFontDialog类的使用
- 南卫理公会大学计算机科学,南卫理公会大学哪个专业好?
- 鸿蒙系统是单任务还是多任务,在鸿蒙系统上使用MQTT编程
- 03_ClickHouse数据格式,TabSeparated、TSKV、CSV格式、JSON格式、Parquet、ORC、其它数据格式(Native,Pretty,Values,Vertical等)
- 项目质量管理知识点整理和习题整理
- 1.关于QT中json数据处理和密码md5加密
- 5.Maven和Eclipse整合(两种方式进行插件的安装),Maven相关设置,Eclipse下创建Maven项目
- Oracle中PLSQL中一个例外的写法