memcached分析

memcache介绍

  memcache是一个高性能的分布式的内存对象缓存系统,用于动态Web应用以减轻数据库负担。它经过在内存中缓存数据和对象,来减小读取数据库的次数。从而提升动态、数据库驱动网站速度。html

  memcache经过在内存里维护一个统一的巨大的hash表,它可以用来存储各类格式的数据,包括图像、视频、文件以及数据库检索的结果等。memcache主要用于分担数据库负的压力,memcache将数据调用到内存中,而后从内存中读取,从而大大提升读取速度。redis

    

 

 

  memcached 的目前版本是经过C实现,采用了单进程、单线程、异步I/O,基于事件(event_based)的服务方式.使用libevent做为事件通知实现。多个Server能够协同工做,但这些 Server 之间是没有任何通信联系的,每一个Server只是对本身的数据进行管理。Client端经过指定Server端的ip地址(经过域名应该也能够)。须要缓存的对象或数据是以key->value对的形式保存在Server端。key的值经过hash进行转换,根据hash值把value传递到对应的具体的某个Server上。当须要获取对象数据时,也根据key进行。首先对key进行hash,经过得到的值能够肯定它被保存在了哪台Server上,而后再向该Server发出请求。Client端只须要知道保存hash(key)的值在哪台服务器上就能够了。算法

memcached的内存算法:
  Memcached利用slab allocation机制来分配和管理内存,它按照预先规定的大小,将分配的内存分割成特定长度的内存块,再把尺寸相同的内存块分红组,数据在存放时,根据键值大小去匹配slab大小,找就近的slab存放,因此存在空间浪费现象。
传统的内存管理方式是,使用完经过malloc分配的内存后经过free来回收内存,这种方式容易产生内存碎片并下降操做系统对内存的管理效率。数据库

Memcached的缓存策略:
  Memcached的缓存策略是LRU(最近最少使用)加上到期失效策略。当你在memcached内存储数据项时,你有可能会指定它在缓存的失效时间,默认为永久。当memcached服务器用完分配的内时,失效的数据被首先替换,而后也是最近未使用的数据。在LRU中,memcached使用的是一种Lazy Expiration策略,本身不会监控存入的key/vlue对是否过时,而是在获取key值时查看记录的时间戳,检查key/value对空间是否过时,这样可减轻服务器的负载。缓存

分布式算法(Consistent Hashing):服务器

  选择服务器算法有两种,一种是根据余数来计算分布,另外一种是根据散列算法来计算分布。
余数算法:
  先求得键的整数散列值,再除以服务器台数,根据余数肯定存取服务器,这种方法计算简单,高效,但在memcached服务器增长或减小时,几乎全部的缓存都会失效。
散列算法:
  先算出memcached服务器的散列值,并将其分布到0到2的32次方的圆上,而后用一样的方法算出存储数据的键的散列值并映射至圆上,最后从数据映射到的位置开始顺时针查找,将数据保存到查找到的第一个服务器上,若是超过2的32次方,依然找不到服务器,就将数据保存到第一台memcached服务器上。若是添加了一台memcached服务器,只在圆上增长服务器的逆时针方向的第一台服务器上的键会受到影响。异步

memcached与redis对比:

  

Redis是一个开源,先进的key-value存储,并用于构建高性能,可扩展的Web应用程序的完美解决方案。分布式

  Redis从它的许多竞争继承来的三个主要特色:memcached

  • Redis数据库彻底在内存中,使用磁盘仅用于持久性。函数

  • 相比许多键值数据存储,Redis拥有一套较为丰富的数据类型。

  • Redis能够将数据复制到任意数量的从服务器。

  •  

  Redis 优点:

  • 异常快速:Redis的速度很是快,每秒能执行约11万集合,每秒约81000+条记录。

  • 支持丰富的数据类型:Redis支持最大多数开发人员已经知道像列表,集合,有序集合,散列数据类型。这使得它很是容易解决各类各样的问题,由于咱们知道哪些问题是能够处理经过它的数据类型更好。

  • 操做都是原子性:全部Redis操做是原子的,这保证了若是两个客户端同时访问的Redis服务器将得到更新后的值。

  • 多功能实用工具:Redis是一个多实用的工具,能够在多个用例如缓存,消息,队列使用(Redis原生支持发布/订阅),任何短暂的数据,应用程序,如Web应用程序会话,网页命中计数等。

总结:

  一、存储方式:
    memecache 把数据所有存在内存之中,断电后会挂掉,数据不能超过内存大小
    redis有部份存在硬盘上,这样能保证数据的持久性,支持数据的持久化(笔者注:有快照和AOF日志两种持久化方式,在实际应用的时候,要特别注意配置文件快照参数,要不就颇有可能服务器频繁满载作dump)。
  二、数据支持类型:
    redis在数据支持上要比memecache多的多。
  三、使用底层模型不一样:
    新版本的redis直接本身构建了VM 机制 ,由于通常的系统调用系统函数的话,会浪费必定的时间去移动和请求。
  四、分布式环境:
    memcached的分布式由客户端实现,经过一致性哈希算法来保证访问的缓存命中率;Redis的分布式由服务器端实现,经过服务端配置来实现分布式;

 


本节主要介绍memcache的原理分析。redis就一带而过了。有兴趣的能够参考我以前介绍redis的博客。但愿对你们有帮助https://www.cnblogs.com/huhongy/category/1093687.html

相关文章
相关标签/搜索