概念
memcached是一个开源的、高性能的分布式内存对象缓存系统。
通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高网站访问速度,减轻数据库负载。
memcached是一种内存缓存,把经常需要存储的对象或数据存在内存中。
在内存中数据通过API的方式被存取,数据经过利用HASH之后被存放到位于内存上的HASH表内,HASH表中的数据已key-value的形式存放,由于Memcached灭有实现访问认证及安全管理控制,因此在面向Internet的系统架构中,Memcached服务器通常位于用户的安全区域。
特点
1、协议简单
使用基于文本行的协议。
2、基于libevent的时间处理
libevent利用C开饭的程序库,他讲BSD系统的kqueue,Linux系统的epoll等时间处理功能封装成一个接口,确保即时服务端口的连数据。加也能发挥很好的性能。
memcahced利用这个库进行异步事件处理。
3、内置的内存管理方式
memcached有一套自己的管理内存方式,非常高效。
4、节点相互独立的分布式
memcached服务器之间互不通信,都是独立的存储数据。
缓存流程
-
检查客户端请求的数据是否在 Memcache 中,如果存在,直接将请求的数据返回,不在对数据进行任何操作。
-
如果请求的数据不在 Memcache 中,就去数据库查询,把从数据库中获取的数据返回给客户端,同时把数据缓存一份 Memcache 中。
-
每次更新数据库的同时更新 Memcache 中的数据库。确保数据信息一致性。
-
当分配给 Memcache 内存空间用完后,会使用LRU(least Recently Used ,最近最少使用 ) 策略加到其失效策略,失效的数据首先被替换掉,然后在替换掉最近未使用的数据。
使用前需要考虑的因素
1、单点故障
2、存储空间限制
(32位系统可以缓存数据位2G,64位系统可以无限缓存,服务器物理内存足够大即可)
3、存储单元限制
以key-value为单元进行储存
key的存储尺寸为250字节
value的存储尺寸为1MB
超过不允许存储
4、数据碎片
内存存储单元是按照chunk来分配的,这意味着不可能所有的value数据大小正好等于chunk的大小,因此会造成内存碎片,而浪费存储空间
5、利用旧算发局限性
memcached缓存系统的LRU算法,并不是针对全局空间的存储数据的,而是针对slab的
slab是memcached中具有同样大小的多个chunk集合
6、数据的访问安全性
memcached服务端并没有相应的安全认证机制通过,通过非加密的Telnet连接即可对memcached服务端的数据进行操作