Memcache学习总结

来源:互联网 发布:外国人北京奥运会知乎 编辑:程序博客网 时间:2024/06/03 17:30

Memcached客户端(mc) 
   Memcached客户端有各种语言的版本供大家使用,
     包括java,c,php,.net等等,具体可参见memcached api page[2]。 大家可以根据自己项目的需要,选择合适的客户端来集成。

Memcached服务器(ms)
     存储数据端 

1、两阶段哈希(缓存值存放)

如上图所示,用户需要通过一个Memcached客户端来完成对缓存服务所记录信息的访问。该客户端知道服务端缓存系统中所包含的所有 Memcached服务实例。在需要访问具有特定键值的数据时,该客户端内部会根据所需要读取的数据的键值,如“foo”,以及当前Memcached缓 存服务的配置来计算相应的哈希值,以决定到底是哪个Memcached实例记录了用户所需要访问的信息。在决定记录了所需要信息的Memcached实例 之后,Memcached客户端将从配置中读取该Memcached服务实例所在地址,并向该Memcached实例发送数据访问请求,以从该 Memcached实例中读取具有键值“foo”的信息。在各个论坛的讨论中,这被称为是Memcached的两阶段哈希(Two-stage hash)。

2、内存分配模型


在一条新的记录到来时,Memcached会首先检查该记录 的大小,并根据记录的大小选择记录所需要存储到的Slab类型。接下来,Memcached就会检查其内部所包含的该类型Slab。如果这些Slab中有 空余的块,那么Memcached就会使用该块记录该条信息。如果已经没有Slab拥有空闲的具有合适大小的块,那么Memcached就会创建一个新的 页,并将该页按照目标Slab的类型进行划分。

默认情况下Memcached中每页的大小为1MB,因此其单个块最大为1MB,可以通过l参数进行设置。除此之外,Memcached还限制每个数据所对应的键的长度不能超过250个字节。

3、多个memcache服务端时,一个memcache节点失效,缓存数据影像

Memcached所使用的解决方法是Consistent Hashing,算法作用 :Memcached实例数量的变化将只可能导致其中的一小部分键的哈希值发生改变。

使用圆,哈希值就近分布到存储点上