memcached作为一个基于文本的协议,主要特征有四个
1、协议简单。文本行协议
2、基于libevent的事件处理方式。使用操作系统的libevent库,性能高
3、基于内存的数据存储方式。数据存储在内存中,容量达到指定值后,根据LRU算法删除不使用的缓存,会重启、断电会导致数据丢失。不能实现数据的持久化
4、不互相通信的分布式。分布式是在客户端实现,各个memcached不互相通信共享信息
memchached内存存储机制
slab allocation机制 基本原理:根据预定大小,把内存分割成指定大小的块,解决了内存碎片问题
把分配的内存分割成各种尺寸的块(chunk),大小相同的块分成组(chunk的集合)
已分配内存不会释放,可以重复使用
memcached删除机制 数据不会真正从memcached中消失,能有效利用资源
lazy Expiration
memcached不会监视记录是否过期,而是在get时查看记录的时间戳,检验是否过期。lazy Expiration使memcached不会在过期监视上耗费cpu时间
LRU: 从缓存中有效删除数据的原理
当memcached的内存空间不足时,用LRU算法从最近未使用的记录中搜索,并将其空间分配给新的记录。新的记录覆盖掉原有的记录
memcached的分布式
分布式是由客户端程序库来实现的,是memcached最大的特点。
调用set方法时,客户端实现的算法根据key来决定保存数据的memcached服务器
调用get方法时,客户端采用与保存数据相同的算法选择服务器。获取保存的值
分布式算法
1、取模法:一台服务器故障时,会造成所有缓存失效,不适用memcached分布式
2、一致性hash算法:首先求出memcached服务器的哈希值,并将其配置到1-2^32的圆上,然后用同样的方法求出存储数据的键的哈希值,并映射到圆上,然后从数据映射到的位置开始顺时针查找,将数据保存到找到的第一个服务器上。