memcache

 

 

Memcached原理http://www.cnblogs.com/caoxiaojian/p/5715568.htmlhtml

Memcache是一个高性能的分布式的内存对象缓存系统,经过在内存里维护一个统一的巨大的hash表,它可以用来存储各类格式的数据,包括图像、视 频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,而后从内存中读取,从而大大提升读取速度(即用于在动态应用中减小数据库负载,提高访 问速度)。前端

   Memcached是以守护进程方式运行于一个或多个服务中,随时会接收客户端的链接和操做。mysql

   Memcached是一种无阻塞的socket通讯方式服务,基于libevent库,因为无阻塞通讯,对内存读写速度很是之快。redis

   Memcached分服务器端和客户端,能够配置多个服务器端和客户端,应用于分布式的服务很是普遍。算法

  Memcached是键值一一对应,key默认最大不能超过256个字 节,value默认大小是1M,也就是一个slabs,若是要存2M的值(连续的),不能用两个slabs,由于两个slabs不是连续的,没法在内存中 存储,故须要修改slabs的大小,多个key和value进行存储时,即便这个slabs没有利用完,那么也不会存放别的数据。sql

Memcached特色()数据库

一、高性能

 不管哪种数据库dbms(mysql,oracle,mssql,db2,Postgres等等),再怎么优化,最终也避不开与慢速的存储介质(硬 盘、磁带)进行数据交换,但每每一旦涉及到了存储介质的io操做,存取性能就会急剧降低。memcached,顾名思义,它的所有操做自始至终都是在内存 中进行的,因此存取数据的效率很是高。

   一般状况下,大型网站对于数据库的操做都会作优化。一般的手段有两种:缓存

       

a、读写数据分离,采用主/辅库的方式,来分散数据库的压力,提升查询速度。安全

 b、按照业务特色横向或者纵向分割数据库。简单来说,就是大库变小库,大表变小表,来提升数据库访问的效率。通常来说,一个数据库具备不少表或者一张表有N多的记录,都会明显的下降数据库的服务能力,好比mysql数据库单表记录达到2000万条左右(笔者之前的工做经验),性能会降低到几乎没法忍受。服务器

 

  数据库会在如下状况下会出现访问瓶颈:

    a、事务操做

       企业级的数据库(好比mysql的innodb模式)都支持事务操做。因为事务具备原子性,事务中涉及的数据表在运行过程当中将会加锁。在这种状况下,访问这些表的数据会出现延迟。

    b、数据更新

       数据库中任何的表在数据更新过程当中,一样会被加锁。在这种状况下,也会出现上面一样的结果。

2分布式

    一种计算机硬件的配置方式和相应的功能配置方式。它是一种多处理器的计算机系统,各处理器经过互连网络构成统一的系统。系统采用分布式计算结构,即把原来 系统内中央处理器处理的任务分散给相应的处理器,实现不一样功能的各个处理器相互协调,共享系统的外设与软件。这样就加快了系统的处理速度,简化了主机的逻 辑结构。

memcache的分布式特性主要表如今两个方面:

    a.memcache客户端mc和服务器端ms能够单独安装在任何独立server上。

     固然部署在同一台server上也没问题,甚至于一台机器上能够部署n个memcached。

     b.memcache服务器端ms能够安装在任意数量的server上,提供并行存储和计算的能力。

        这是分布式特性的本质体现。ms能够造成任意多台server组成的集群,为mc提供服务。

Memcached工做机制()

Memcached 是以守护程序方式运行于一个或多个服务器中,随时接受客户端的链接操做,客户端能够由各类语言编写,目前已知的客户端 API 包括 Perl/PHP/Python/Ruby/Java/C#/C 等等。客户端首先与 Memcached 服务创建链接,而后存取对象。每一个被存取的对象都有一个惟一的标识符 key,存取操做均经过这个 key 进行,保存的时候还能够设置有效期。保存在 Memcached 中的对象其实是放置在内存中的,而不是在硬盘上。Memcached 进程运行以后,会预申请一块较大的内存空间,本身进行管理,用完以后再申请一块,而不是每次须要的时候去向操做系统申请。Memcached将对象保存在 一个巨大的Hash表中,它还使用NewHash算法来管理Hash表,从而得到进一步的性能提高。因此当分配给Memcached的内存足够大的时候, Memcached的时间消耗基本上只是网络Socket链接了。

        Memcached按照LRU方式调度数据。LRU是Least Recently Used的缩写,即最近最少使用页面置换算法,是为虚拟页式存储管理服务的。LRU算法在实际的工做环境中会与操做系统相关,所如今都使用X64位系统。

 

Memcached删除机制()

Memcached并无过时监控,它是标记删除,只要内存没有被重复使用,即便过时了,数据也会存在于内存之中,只是在get时检测过时时间,若是当前时间大于有效期,就直接返回false。

Memcached应用场景

一、分布式应用。

   因为memcached自己基于分布式的系统,因此尤为适合大型的分布式系统。

二、数据库前段缓存

   数据库经常是网站系统的瓶颈。数据库的大并发量访问,经常形成网站内存溢出。固然咱们也可使用Hibernate的缓存机制。但memcached是基于分布式的,并可独立于网站应用自己,因此更适合大型网站进行应用的拆分。

三、服务器间数据共享

      举例来说,咱们将网站的登陆系统、查询系统拆分为两个应用,放在不一样的服务器上,并进行集群,那这个时候用户登陆后,登陆信息如何从登陆系统服务器同步 到查询系统服务器呢?这时候,咱们即可以使用memcached,登陆系统将登陆信息缓存起来,查询系统即可以得到登陆信息,就像获取本地信息同样。

不适合应用的场景:

一、缓存的数据量比较小。

二、缓存的数据须要持久化。

Memcached优势

一、提升系统的并发能力

二、减轻数据库的负担

两种用途其实很是容易理解。因为memcached高性能,因此能够同时服务于更多的链接,大大提升了系统的并发处理的能力。另外,memcached通 常部署在业务逻辑层(前台应用)和存储层(主指数据库)之间,做为数据库和前台应用的数据缓冲,所以能够快速的响应前端的请求,减小对数据库的访问。

 

redismemcached的区别(总结) 

一、Redis和Memcache都是将数据存放在内存中,都是内存数据库。不过memcache还可用于缓存其余东西,例如图片、视频等等;

二、Redis不只仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储;

三、虚拟内存--Redis当物理内存用完时,能够将一些好久没用到的value 交换到磁盘;

四、过时策略--memcache在set时就指定,例如set key1 0 0 8,即永不过时。Redis能够经过例如expire 设定,例如expire name 10;

五、分布式--设定memcache集群,利用magent作一主多从;redis能够作一主多从。均可以一主一从;

六、存储数据安全--memcache挂掉后,数据没了;redis能够按期保存到磁盘(持久化) 读取方面尤为是针对批量读取性能方面memcached占据优点。固然redis也有他的优势,如持久性、支持更多的数据结构。 因此在选择方面若是有持久方面的需求或对数据类型和处理有要求的应该选择redis;

七、灾难恢复--memcache挂掉后,数据不可恢复; redis数据丢失后能够经过aof恢复;

八、Redis支持数据的备份,即master-slave模式的数据备份;

九、应用场景不同:Redis出来做为NoSQL数据库使用外,还能用作消息队列、数据堆栈和数据缓存等;Memcached适合于缓存SQL语句、数据集、用户临时性数据、延迟查询数据和session等。

相关文章
相关标签/搜索