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…

时间: 2024-11-05 22:54:59

MemCached配置与缓存知识概述的相关文章

nginx+tomcat+memcached配置负载均衡与session共享学习一

版本信息:nginx-1.9.11 ,WEB服务器 apache-tomcat-7.0.34-1,servlet容器 apache-tomcat-7.0.34-2, servlet容器 jdk1.6 memcached  内存对象缓存系统 首先配置 nginx信息 配置路径:nginx-1.9.11\conf\nginx.conf 配置信息   #这是基本版的 其它的优化先不提供     server {     #访问地址与端口号         listen       80;       

浏览器缓存知识小结及应用

阅读目录 1. 浏览器缓存基本认识 2. 强缓存的原理 3. 强缓存的管理 4. 强缓存的应用 5. 协商缓存的原理 6. 协商缓存的管理 7. 浏览器行为对缓存的影响 浏 览器缓存,也就是客户端缓存,既是网页性能优化里面静态资源相关优化的一大利器,也是无数web开发人员在工作过程不可避免的一大问题,所以在产品开发的 时候我们总是想办法避免缓存产生,而在产品发布之时又在想策略管理缓存提升网页的访问速度.了解浏览器的缓存命中原理,是开发web应用的基础,本文着眼 于此,学习浏览器缓存的相关知识,总

你有自己的Web缓存知识体系吗?

赵舜东 江湖人称赵班长,曾在武警某部负责指挥自动化的架构和运维工作,2008年退役后一直从事互联网运维工作.曾带团队负责国内某电商的运维工作,<saltstack入门与实践>作者,某学院高级讲师. 一.引言 学技术一定要成体系,这是我个人的学习目标,也就是在一个特定的范围内,把与此相关的技术都尽量的搞清楚.搞明白. 我把与Web缓存相关的内容从我编写的<Web运维知识体系>(链接1)中拿了出来,进行完善后,形成了一个单独的<Web缓存知识体系>(链接2),分享给大家,仅

Web开发人员需知的Web缓存知识

什么是Web缓存,为什么要使用它? Web缓存游走于服务器和客户端之间.这个服务器可能是源服务器(资源所驻留的服务器Add),数量可能是1个或多个:这个客户端也可能是1个或多个.Web缓存就在服务器-客户端之间搞监控,监控请求,并且把请求输出的内容(例如html页面. 图片和文件)(统称为副本)另存一份:然后,如果下一个请求是相同的URL,则直接请求保存的副本,而不是再次麻烦源服务器. 使用缓存的2个主要原因: 降低延迟:缓存离客户端更近,因此,从缓存请求内容比从源服务器所用时间更少,呈现速度更

nginx+memcached构建页面缓存

传统上PHP 中使用memcache 的方法是使用 php-memcache 或 php-memached 扩展操作 memcache ,在 Nginx 上有构建更高效缓存机制的方法.就是 Nginx 直接访问 memcache ,并用 uri 和 args 等 Nginx 内置变量设定缓存 key 规则,这样,当缓存命中时, Nginx 可以跳过通过 fastcgi 和 PHP 通信的过程,直接从 memcache 中获取数据并返回. memc-nginx 和 srcache-nginx 正是

【MySQL优化】MySQL 高并发配置优化基础知识

[MySQL优化]MySQL 高并发配置优化基础知识 MySQL的优化分为两个部分,一是服务器物理硬件的优化,二是MySQL自身(my.cnf)的优化. 一.服务器硬件对MySQL性能的影响 ① 磁盘寻道能力(磁盘I/O),以目前高转速SCSI硬盘(7200转/秒)为例,这种硬盘理论上每秒寻道7200次,这是物理特性决定的,没有办法改变. MySQL每秒钟都在进行大量.复杂的查询操作,对磁盘的读写量可想而知.所以,通常认为磁盘I/O是制约MySQL性能的最大因素之一,对于日均访问量 在100万P

mybatis(4)_二级缓存深入_使用第三方ehcache配置二级缓存

增删改对二级缓存的影响 1.增删改也会清空二级缓存 2.对于二级缓存的清空实质上是对value清空为null,key依然存在,并非将Entry<k,v>删除 3.从DB中进行select查询的条件是: 1.缓存中根本不存在这个key 2.存在key对应的Entry,但是value为null 二级缓存的配置 <cache eviction="FIFO" flushInterval="60000" size="512" readOn

14 nginx 中配置 expires缓存提升网站负载

一:nginx 中配置 expires缓存提升网站负载 对于网站的图片,尤其是新闻站, 图片一旦发布, 改动的可能是非常小的.我们希望 能否在用户访问一次后, 图片缓存在用户的浏览器端,且时间比较长的缓存. 可以, 用到 nginx的expires设置 . nginx中设置过期时间,非常简单, 在location或if段里,来写. 格式 expires 30s; expires 30m; expires 2h; expires 30d; (注意:服务器的日期要准确,如果服务器的日期落后于实际日期

Java环境配置 数据库 缓存Redis Nosql MongoDB 安装

系统选择 centos 7.0 1.java安装篇 rpm -qa |grep java 检测是否java yum remove java-1.7.0-openjdk 使用命令删除java 到oracle官方下载java安装包 rpm -ivh jdk-7u60-linux-x64.rpm ->安装jdk 2.Tomcat 安装篇 在apache官方下载tomcat wget http://apache.fayea.com/apache-mirror/tomcat/tomcat-7/v7.0.5