`

memcache 内部结构详解

 
阅读更多

http://tank.blogs.tkiicpp.com/category/programming/memcache/
Memcached主要的cache机制是LRU(最近最少用)算法+超时失效
http://code.google.com/p/memcached/

Memcached 集群架构方面的问题
http://kb.cnblogs.com/page/69074/#how%20does%20memcached%20work

Memcache内存分配策略

1、Page为内存分配的最小单位。
Memcached的内存分配以page为单位,默认情况下一个page是1M,可以通过-I参数在启动时指定。
2、Slabs划分数据空间。
Memcached并不是将所有大小的数据都放在一起的,而是预先将数据空间划分为一系列slabs,每个slab只负责一定范围内的数据存储。
memcached默认情况下下一个slab的最大值为前一个的1.25倍,这个可以通过修改-f参数来修改增长比例
3、Chunk才是存放缓存数据的单位。
Chunk是一系列固定的内存空间,这个大小就是管理它的slab的最大存放大小
4、Slab的内存分配。
Memcached在启动时通过-m指定最大使用内存,但是这个不会一启动就占用,是随着需要逐步分配给各slab的。
如果一个新的缓存数据要被存放,memcached首先选择一个合适的slab,然后查看该slab是否还有空闲的chunk,如果有则直接存放进去;如果没有则要进行申请。
slab申请内存时以page为单位,所以在放入第一个数据,无论大小为多少,都会有1M大小的page被分配给该slab。
申请到page后,slab会将这个page的内存按chunk的大小进行切分,这样就变成了一个chunk的数组,在从这个chunk数组中选择一个用于存储数据

5、Memcached内存分配策略。
综合上面的介绍,memcached的内存分配策略就是:按slab需求分配page,各slab按需使用chunk存储。
这里有几个特点要注意,

Memcached分配出去的page不会被回收或者重新分配
Memcached申请的内存不会被释放
slab空闲的chunk不会借给任何其他slab使用


提供了gets和cas命令
分享到:
评论

相关推荐

    php之Memcache的使用

    - 哈希分布:Memcache内部使用一致性哈希算法,将键映射到特定服务器,减少因服务器增减导致的数据重新分布。 - 序列化与反序列化:默认情况下,PHP的Memcache扩展会自动处理数据的序列化和反序列化,允许存储复杂...

    Python库 | meta_memcache-0.4.2-py3-none-any.whl

    **Python库meta_memcache-0.4.2-py3-none-any.whl详解** `meta_memcache` 是一个针对Python的高效、轻量级的Memcached客户端库,它提供了对Memcached缓存服务的全面支持。Memcached是一种分布式内存对象缓存系统,...

    memcache的tcp_udp_内存流程图.pdf

    ### Memcached内存缓存系统详解 #### 一、概述 Memcached是一款高性能的分布式内存对象缓存系统,用于加速动态Web应用,减轻数据库负载。它通过在内存中缓存数据和对象来减少读写数据库的次数,从而提高网站的速度...

    贪玩php面试题.docx

    【PHP面试知识点详解】 1. **SESSION与COOKIE**:禁用COOKIE后,SESSION仍然可以使用。SESSION基于服务器端存储,不依赖于客户端的COOKIES。服务器通过在HTTP头中设置一个唯一标识(session_id)来跟踪用户状态。 ...

    2022年高级项目经理在线考试试题计算机信息系统集成项目管理人员继续教育服务平台.docx

    5. Google 为 Bigtable 设计的内部数据存储格式是 SSTable,它是一种高效的持久化数据结构。 6. 云计算分析处理最适合处理大数据,例如天气预报数据、科学计算数据和商业数据。耦合度高的数据可能不适合云计算,...

    史上最全韩顺平传智播客PHP就业班视频,10月份全集

    9-30 4 构造方法 对象的常用操作 9-30 5 面向对象的封装 继承 多态 9-30 6 面向对象的封装 继承 多态2 9-5 1.php xml编程①-xml基本介绍 xml元素 xml属性 9-5 2.php xml编程②-cdata 实体字符 处理指令 dtd快速入门 ...

    史上最全传智播客PHP就业班视频课,8月份视频

    9-30 4 构造方法 对象的常用操作 9-30 5 面向对象的封装 继承 多态 9-30 6 面向对象的封装 继承 多态2 9-5 1.php xml编程①-xml基本介绍 xml元素 xml属性 9-5 2.php xml编程②-cdata 实体字符 处理指令 dtd快速入门 ...

    史上最全韩顺平传智播客PHP就业班视频,9月份全集

    9-30 4 构造方法 对象的常用操作 9-30 5 面向对象的封装 继承 多态 9-30 6 面向对象的封装 继承 多态2 9-5 1.php xml编程①-xml基本介绍 xml元素 xml属性 9-5 2.php xml编程②-cdata 实体字符 处理指令 dtd快速入门 ...

    (全)传智播客PHP就业班视频完整课程

    9-30 4 构造方法 对象的常用操作 9-30 5 面向对象的封装 继承 多态 9-30 6 面向对象的封装 继承 多态2 9-5 1.php xml编程①-xml基本介绍 xml元素 xml属性 9-5 2.php xml编程②-cdata 实体字符 处理指令 dtd快速入门 ...

    韩顺平PHP JS JQUERY 所有视频下载种子 货真价实

    9-30 4 构造方法 对象的常用操作 9-30 5 面向对象的封装 继承 多态 9-30 6 面向对象的封装 继承 多态2 9-5 1.php xml编程①-xml基本介绍 xml元素 xml属性 9-5 2.php xml编程②-cdata 实体字符 处理指令 dtd快速入门 ...

    Google App Engine 开发人员指南.pdf

    - **配置索引**:通过 `index.yaml` 文件定义数据模型的索引结构。 - **开发服务器**:使用 `dev_appserver.py` 在本地模拟 GAE 服务器环境。 - **上传应用程序**:使用 `appcfg.py` 工具将应用部署到生产环境。 - *...

    memcached源代码下载.rar

    1. **源码阅读**:通过阅读`memcached-1.2.1-win32-src.zip`中的源代码,可以了解memcached的内部实现,包括数据结构、网络通信、并发控制等核心部分。 2. **二次开发**:理解源代码后,可以根据需求进行定制,或者...

    Java高级架构必备知识点

    - **Memcache的原理分析及使用**:比较Memcache和Redis的不同之处。 **7.9 高并发专题-数据库层面优化** - **分库分表的原理及规则讲解**:了解分库分表的策略。 - **数据库主备及高可用**:实现数据库的主备切换...

Global site tag (gtag.js) - Google Analytics