memcached(二)--原理

一.memcached的内存存储

1.Slab Allocation机制

最近的memcached默认情况下采用了名为Slab Allocator的机制分配、管理内存。在该机制出现以前,内存的分配通过malloc和free来进行,但是该机制会导致内存碎片,加重操作系统的负担;


2.原理

Slab Allocator的基本原理是按照预先规定的大小,将分配的内存分割成特定长度的块(chunk),并把尺寸相同的块分成组(chunk的集合);


3.术语

page:分配给Slab的内存空间,默认是1MB,分配给Slab之后根据slab的大小切分成chunk;

chunk:用于缓存记录的内存空间;

Slab Class:热定大小的chunk组;


4.缺点

由于分配的是特定长度的内存,因此无法有效利用分配的内存;


5.Growth Factor因子

memcached在启动时指定Growth Factor因子(-f选项),可以在某种程度上控制slab之间的差异,默认是1.25,即组的大小依次增大Wie原来的1.25倍;



6.查看memcached的内部状态,首先使用telnet HOST port连接到memcached,输入stats命令,即可获得包括资源利用率在内的各种信息,stats salbs或stats items还可获得关于缓存记录的信息。



二.memcached的分布式实现

1.原理:

首先向memcached中添加键,将键传给客户端程序库后,客户端实现的算法就会根据键来决定保存数据的memcached服务器,选定之后,保存键和值;

当要获取保存的数据时,将需要获取的键传给函数库,函数库通过与数据保存时相同的算法,根据键来选择服务器,使用的算法相同,就能选中保存时相同的服务器,然后发送get命令;


2.Cache::Memcached的分布式方法

1)Perl的memcached客户端函数库Cache::Memcached实现了分布式功能,是memcached标准的分布式方法,是根据余数计算分散,就是“根据服务器台数的余数进行分散”,求得键的整数哈希值,再除以服务器台数,根据余数来选择服务器;


2)通过该算法可以很好地实现分散,但其缺点是:当服务器台数发生变更时,缓存重组的代价巨大,影响缓存命中率;


3.Consistent Hashing

1)该算法首先求出memcached服务器的哈希值,并将其配置到0~2^32的圆上,然后用同样的方法求出存储数据的键的哈希值,并映射到圆上,然后从该位置顺时针查找memcached节点,将数据保存到找到的第一个节点上,如果没有找到,则保存在第一台上;


2)当节点数量变更时,只有在圆上增加节点附近的数据会受到影响,因此能最大程度地抑制键的重新分布,但是服务器的映射地点分布不均匀。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值