核心知识点

memcached总的特点:简单、稳定、专注

1.简单的通信协议

  a.通信协议:TCP

  b.序列化协议:文本的自定义协议

2.丰富的客户端程序:几乎支持所有的网络编程语言

3.高性能的网络通信:Libevent(事件出发的通信协议库)

4.高效的内存管理:固定内存分配(slab_class——》slab——》chunk)

5.互不通信的集群架构

Memcached曾一度是网站分布式缓存的代名词,被大量网站使用。

其简单的设计、优异的性能、互不通信的服务器集群、海量数据可伸缩的架构令网站架构师们趋之若鹜。

Memcached的优异性主要表现在以下几个方面:

(1)简单的通信协议

远程通行设计需要考虑两方面的要素,一是通信协议,选择TCP协议还是UDP协议,抑或是HTTP协议;

一是通信序列化协议,数据传输的两端,必须使用彼此可识别的数据的数据序列化方式才能使通信得以完成,

如XML、JSON等文本序列化协议,抑或是Google Protobuffer等二进制序列化协议。

Memcached使用TCP协议(UDP也支持)通信,其序列化协议则是一套基于文本的自定义协议

非常简单,以一个命令关键字开头,后面是一组命令操作数。

例如读取一个数据的命令协议是get <key>。Memcached以后,许多NoSQL产品都借鉴了或直接会支持这套协议。

(2)丰富的客户端程序

Memcached通信协议非常简单,只要支持该协议的客户端都可以和Memcached服务器通信,

因此Memcached发展出非常丰富的客户端程序,几乎支持所有的主流的网络编程语言,

例如,Java、C/C++/C#、Perl、Python、PHP、Ruby等,因此在混合使用多种编程的网站,Memcached更是如鱼得水。

(3)高性能的网络通信

Memcached服务端通信模块基于Libevent,一个支持事件出发的网络通信程序库,

Libevent的设计和实现有许多值得改善的地方,但它在稳定的长连接方面的表现却正是Memcached需要的。

(4)高效的内存管理

内存管理中一个令人头疼的问题就是内存碎片管理。操作系统、虚拟机垃圾回收在这方面想了许多方法:压缩、复制等。

Memcached使用了一个非常简单的方法——固定空间分配

Memcached将内存空间分为一组slab,每个slab里又包含一组chunk,同一个slab里的每个chunk的大小是固定的,

拥有相同大小chunk的slab被组织在一起,叫作slab_class。

存储数据时根据数据的Size大小,寻找一个大于Size的最小chunk将数据写入。

这种内存管理方式避免了内存碎片管理的问题,内存的分配和释放都是以chunk为单位的。

和其它缓存一样,Memcached采用LRU算法释放最近最久未被访问的数据占用的空间,

释放的chunk被标记为未用,等待下一个合适大小的数据写入。

当然这种方式也会带来内存浪费的问题。数据只能存入一个比它大的chunk里,而一个chunk只能存入一个数据,其他内存空间被浪费了。

如果启动参数配置不合理,浪费会更加惊人,发现没有缓存多少数据,内存空间就用尽了。

(5)互不通信的服务器集群架构

如上所说,正是这个特性使得Memcached从JBoss Cache、OSCache等众多分布式缓存产品中脱颖而出,满足网站对海量缓存数据的请求。

而其客户端路由算法一致性hash更成为数据存储伸缩性架构设计的经典范式。

事实上,正是集群内服务器互不通信使得集群可以做到几乎无限制的线性伸缩,这也是目前流行的许多大数据技术的基本架构特点。

虽然近些年许多NoSQL产品层出不穷,在数据持久化、支持复杂数据结构、甚至性能方面有许多产品优于Memcached,

但Memcached由于其简单、稳定、专注的特点,仍然在分布式缓存领域占据着重要的地位。

Memcached的优点的更多相关文章

  1. 畅谈Redis和Memcached的区别

    简述 memcached 和 redis 都很类似:都是内存型数据库,数据保存在内存中,通过tcp直接存取,优势是速度快,并发高,缺点是数据类型有限,查询功能不强,一般用作缓存. 那么题主说 memc ...

  2. memcached的缺点

    上篇博客说了为什么引入memcached,主要讲述了memcached的优点,接下来就是我们在使用中必须要注意的内容,memcached的缺点,只有正确认识它,才能运用自如,接下来先看一下memcac ...

  3. 为什么引入Memcached?

    刚memcached了解学习,一直是处于一个懵懂的状态,先是对memcached进行了一个了解,但我们为什么要在ITOO中引入memcached呢?当问我的时候当时自己脑子中打了一个大大的 这就必须去 ...

  4. redis,memcached,mongodb之间的区别

    Redis Redis的优点: 支持多种数据结构,如 string(字符串). list(双向链表).dict(hash表).set(集合).zset(排序set).hyperloglog(基数估算) ...

  5. Redis、Memcache和MongoDB的区别

    >>Memcached Memcached的优点:Memcached可以利用多核优势,单实例吞吐量极高,可以达到几十万QPS(取决于key.value的字节大小以及服务器硬件性能,日常环境 ...

  6. redis、memcache、mongoDB有哪些区别(转载)

    转载: http://leandre.cn/database/64.html Memcached Memcached的优点: Memcached可以利用多核优势,单实例吞吐量极高,可以达到几十万QPS ...

  7. linux下实现redis共享session的tomcat集群

    为了实现主域名与子域名的下不同的产品间一次登录,到处访问的效果,因此采用rediss实现tomcat的集群效果.基于redis能够异步讲缓存内容固化到磁盘上,从而当服务器意外重启后,仍然能够让sess ...

  8. Redis、Memcache与MongoDB的区别

    >>Memcached Memcached的优点:Memcached可以利用多核优势,单实例吞吐量极高,可以达到几十万QPS(取决于key.value的字节大小以及服务器硬件性能,日常环境 ...

  9. 第一章· Redis入门部署及持久化介绍

    Redis简介 Redis安装部署 Redis持久化 Redis简介 软件说明: Redis是一款开源的,ANSI C语言编写的,高级键值(key-value)缓存和支持永久存储NoSQL数据库产品. ...

随机推荐

  1. EasyMvc入门教程-基本控件说明(8)提醒导航

    提醒导航顾名思义就是提醒大家注意某些文字了..请看下面的例子: 实现代码如下: @Html.Q().BlockRemind().Text("我可以作为提醒使用") 有的同学会说:这 ...

  2. fastjson设置生成的json属性的顺序

    目标JSON顺序: {,,} 1.url2.w3.h4.s 如果使用默认情况生成,则顺序为: w,h,s,url 在fastJson中,可以使用@JSONField来指定属性顺序(需要1.1.42以上 ...

  3. JAVA Eclipse ActivityManager Warning Activity not started, its current task has been brought to the front怎么办

    Eclipse运行提示Activity not started,因为当前程序已经在运行,需要退出当前程序再测试

  4. Odoo11 新功能 : 栏位隐藏

        Odoo11增加了一个 新的 modifier-. 先上 前端框架代码     invisible / readonly / required 这几个 是经常在用的, column_invis ...

  5. MFC中几个函数的使用

      1.GetDlgItem() CWnd* GetDlgItem ( int nID ) const;这个就足够了(在MFC中经常这么用),如果你是在win32API下面写的话,那么一般创建一个窗口 ...

  6. 阿里巴巴天猫超市团队招聘java开发工程师

    大家好,发个招聘信息:我是阿里巴巴集天猫超市开发团队的同学,我们部门目前在杭州招人,P6岗位,要求至少本科,熟悉java,spring等java开发技术,最好有互联网企业开发经验,感兴趣的可以通过我直 ...

  7. hdu4405Aeroplane chess 概率dp水题

    //从0到n有n+1个格子 //对于格子i,掷一次骰子的数为x.那么能够从位置i到位置i+x //格子之间有连线,假设格子a和b有连线,那么从a到b不用掷骰子 //求从0到n的骰子掷的次数的期望 // ...

  8. 用命令行执行ROBOT FRAMEWORK

    除了在ride中执行用例,我们也可以通过命令行的形式执行用例. 1.执行一整个项目 pybot+项目路径 2.执行某个测试集 pybot+测试集的路径 3.执行某个测试集里面的某个用例 pybot - ...

  9. 【甘道夫】Hadoop2.2.0 NN HA具体配置+Client透明性试验【完整版】

    引言: 前面转载过一篇团队兄弟[伊利丹]写的NN HA实验记录,我也基于他的环境实验了NN HA对于Client的透明性. 本篇文章记录的是亲自配置NN HA的具体全过程,以及全面測试HA对clien ...

  10. HTML元素定位

    一切皆为框 div.h1 或 p 元素常常被称为块级元素(block element).这意味着这些元素显示为一块内容,即"块框".与之相反,span 和 strong 等元素称为 ...