特点:
1、协议实现简单,使用telnet或nc等命令就可以直接操作memcached存取数据
2、支持epoll/kqueue异步I/O模型,使用libevent作为事件处理通知机智
3、使用key -> value键值作为数据存储格式
4、使用全内存缓存,效率高,但服务重启数据会丢失
工作原理:
1、Memcached是一款开源、高性能、分布式内存对象缓存系统,可应用各种需要缓存的场景
2、Memcached将数据缓存于内存中
3、Memcached是一款开发工具,它既不是一个代码加速器,也不是数据库中间件,其设计哲学思想主要反映在如下方面:
1. 简单key/value存储:服务器不关心数据本身的意义及结构,只要是可序列化数据即可。存储项由“键、过期时间、可选的标志及数据”四个部分组成; 2. 功能的实现一半依赖于客户端,一半基于服务器端:客户负责发送存储项至服务器端、从服务端获取数据以及无法连接至服务器时采用相应的动作;服务端负责接收、存储数据,并负责数据项的超时过期; 3. 各服务器间彼此无视:不在服务器间进行数据同步; 4. O/1的执行效率 5. 清理超期数据:默认情况下,Memcached是一个LRU缓存,同时,它按事先预订的时长清理超期数据;但事实上,memcached不会删除任何已缓存数据,只是在其过期之后不再为客户所见;而且,memcached也不会真正按期限清理缓存,而仅是当get命令到达时检查其时长;
适用场景:
1、网站包含了访问量很大(什么叫很大,那是多大?)的动态网页,因而数据库的负载将会很高, 且大部分数据库请求都是读操作;
2、数据库服务器的负载比较低,CPU 使用率却很高;
3、小型需要共享的数据,如 session 等临时数据;
4、缓存一些很小但是被频繁访问的文件。图片这种大点儿的文件就由 CDN(内容分发网络)来处理了。
不适用场景:
1、缓存对象的大小大于 1 MB, Memcached 本身就不是为了处理庞大的多媒体和巨大的二进制块而设计的,如果你任性,要存这么大的数据,可以自己修改源代码,它是开源的,不过请慎改;
2、key 的长度大于 250 字符(硬性要求);
3、环境不允许运行 memcached 服务,如虚拟主机;
4、应用运行在不安全的环境中,Memcached 未提供任何安全策略,仅仅通过 telnet 就可以访问到 memcached。数据安全越来越重要了,so,请把它放在防火墙后;
5、业务需要的是持久化数据时请使用数据库。
名词解释:
1、Page #分配给slab用于切割的内存空间,默认为1MB
2、Chunk #用户缓存记录的内存空间
3、slab class #特定大小的chunk组
本文出自 “运维危机” 博客,请务必保留此出处http://qiudays.blog.51cto.com/8910608/1726262
原文地址:http://qiudays.blog.51cto.com/8910608/1726262