memcached研究
来源:互联网 发布:杜海涛 知乎 编辑:程序博客网 时间:2024/06/07 07:11
一,梗概
memcached是高性能的分布式内存缓存服务器,一般的使用目的:
1,通过缓存数据库查询结果;
2,减少数据库访问次数;
3,以提高动态web应用的速度,提高可扩展性;
特征:1,协议简单
2,基于libevent的事件处理
3,内置内存存储方式--默认使用LRU(Least Recently Used,最近最少使用)算法自动删除缓存数据.重启服务器的时候也会导致缓存数据全部消失.
4,memcached不互相通信的分布式
二,原理
缓存策略:
缓存策略基于客户端的策略,一致性哈希算法
slab Allocation机制:整理内存以便重复使用.基本原理是按照预定的的大小,将分配的内存分割成特定长度的块,以完全解决内存碎片的问题.
将分配的内存分割成各种尺寸的块(chunk),并把尺寸相同的块分成组(chunk).而且,slab allocator还有重复使用已分配的内存的目的。也就是说,分配到的内存不会释放,而是重复利用.
术语:
1,page:分配给slab的内存空间,默认是1MB,分配给slab之后根据slab的大小切成chunk
2,chunk:用于缓存记录的内存空间
3,slab class:特定大小的chunk的组.
缓存原理:
memcached收到的数据的大小,选择最适合数据大小的slab,memcached中保存着slab内空闲chunk的列表,根据
列表选择chunk,然后将数据缓存其中.
slab allocator缺点:
1,slab allocator解决了当初的内存碎片的问题,但新的机制也给memcached带来了新的问题:
问题就是:由于分配的是特定长度的内存,已
一致性哈希:
影响:只在增加服务器的节点的逆时针方向的第一台服务器上的键收到影响.
因此,Consistent Hashing 最大限度地抑制了键的重新分布。而且,有的 Consistent Hashing 的实现方
法还采用了虚拟节点的思想。使用一般的hash 函数的话,服务器的映射地点的分布非常不均匀。
因此,使用虚拟节点的思想,为每个物理节点(服务器)在continuum 上分配 100~200个点。这样
就能抑制分布不均匀,最大限度地减小服务器增减时的缓存重新分布。
通过下文中介绍的使用 Consistent Hashing 算法的memcached 客户端函数库进行测试的结果是,由
服务器台数(n)和增加的服务器台数(m)计算增加服务器后的命中率计算公式如下:
(1 n/(n+m)) * 10
三,集群管理
0 0
- memcached研究
- memcached存储机制研究
- memcached 高可用研究
- php-memcached的一些研究
- Memcached 深度研究与分析
- 【Memcached】1.Memcached环境搭建与初步运用研究
- memcached的一些研究(关于memcached的内存分配机制)
- Memcached
- memcached
- Memcached
- memcached
- Memcached
- memcached
- memcached
- memcached
- memcached
- memcached
- Memcached
- 打印星星
- 按平均成绩从高到低显示所有学生的“数据库”、“企业管理”、“英语”三门的课程成绩,按如下形式显示: 学生ID,,数据库,企业管理,英语,有效课程数,有效平均分
- SGI STL 的内存管理
- C语言中函数修改指针本身
- 一些不为人知的php试题(暂时就总结这些!后续会一直增加 大家觉得不全的请评论或者留言)
- memcached研究
- HDU 1988 Flipping Burned Pancakes (模拟)
- [A Weird Bug] caused by the name of Python script
- exec函数族
- 知名技术团队博客网站
- Node核心模块之fs模块
- 2659: [Beijing wc2012]算不出的算式
- 机器学习笔记(三)牛顿法和梯度下降法
- 数组的几种复制方法