




已阅读5页,还剩31页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
深入了解memcache 华多网络科技有限公司 林淑彬 peter qq 19743709 提纲 memcache的内存管理机制addServer的工作原理memcache的分布式策略memcache高级应用案例memcache监控memcache监控工具参考addServer思路写mysql分布式连接类实现mysql集群 1 memcache的内存管理机制 1 1内存分配机制1 2缓存删除与失效机制1 3内存不足时的LRU失效机制 1 1内存分配机制 1 1 1Page为内存分配的最小单位 1 1 2Slabs划分数据空间 1 1 3问题 为什么采用这样的内存分配方式 而不是使用某个key的时候再malloc 用完free 1 1 1Page为内存分配的最小单位 1 Memcached的内存分配以page为单位 默认情况下一个page是1M 2 page的申请是根据slab区域来申请 比如如果slab1的存放内存单位是1 104bytes 那slab1申请的page将以104byte为单位来划分成10082个单位 1 1 2Slabs划分数据空间 1 根据Slabs划分数据空间Memcached并不是将所有大小的数据都放在一起的 而是预先将数据空间划分为一系列slabs 每个slab只负责一定范围内的数据存储 如下图 每个slab只存储大于其上一个slab的size并小于或者等于自己最大size的数据 例如 slab3只存储大小介于137到224bytes的数据 如果一个数据大小为230byte将被分配到slab4中 从下图可以看出 每个slab负责的空间其实是不等的 memcached默认情况下下一个slab的最大值为前一个的1 25倍 1 1 2Slabs划分数据空间 1 Chunk才是存放缓存数据的单位 Chunk是一系列固定的内存空间 这个大小就是管理它的slab的最大存放大小 例如 slab1的所有chunk都是104byte 1 1 3问题 为什么采用这样的内存分配方式 而不是使用某个key的时候再malloc 用完free 1 1 3问题 为什么采用这样的内存分配方式 而不是使用某个key的时候再malloc 用完free 答案 1 提高性能 2 预防产生内存碎片 1 2缓存删除与失效机制 1 缓存删除 放入一个删除队列 表明它不可以通过get命令获取到值 但是同时add和replace命令也会失败 无论如何set命令都会成功 在这段时间过去后 元素最终被从服务端内存中free删除掉 2 缓存过期 memcache使用的是一种LazyExpiration策略 自己不会监控存入的key value是否过期 而是在获取key值时查看记录的时间戳 检查key value对空间市口过去 3 问题 1 memcache为什么不主动回收过期内存 1 2缓存删除与失效机制 1 缓存删除 放入一个删除队列 表明它不可以通过get命令获取到值 但是同时add和replace命令也会失败 无论如何set命令都会成功 在这段时间过去后 元素最终被从服务端内存中free删除掉 2 缓存过期 memcache使用的是一种LazyExpiration策略 自己不会监控存入的key value是否过期 而是在获取key值时查看记录的时间戳 检查key value对空间市口过去 3 问题 1 memcache为什么不主动回收过期内存 答案 一切为了性能 大家使用memcache就是因为它的高性能 内存过期检测会浪费大量CPU资源 1 3内存不足时的LRU失效机制 1 LRU机制 当空间被占满时 memcache就会使用LRU算法来分配空间 删除最近少使用的key value对 将其空间分配给新的key value对 2 为了性能 还是不能让memcache内存不够由于使用LRU算法分配空间会消耗CPU资源 为了性能 最好让你的memcache保存足够的空间 2 addServer的工作原理 PHP手册的介绍 Memcached addServer 增加指定服务器到服务器池中 此时不会建立与服务端的连接 但是 如果你使用一致性key分布选项 Memcached DISTRIBUTION CONSISTENT或Memcached OPT LIBKETAMA COMPATIBLE 一些内部的数据结构将会被更新 因此 如果你需要增加多台服务器 更好的方式是使用Memcached addServers以确保这种更新只发生一次 同一台服务器可以在服务器池中多次出现 因为这里没有做重复检测 但这是不推荐的做法 对于期望提高某台服务器权重的需求 请使用weight参数 3 memcache的分布式策略 3 1取余分布式策略3 2一致性分布式策略3 3设计自定义的分布式策略 3 1取余分布式策略 3 1 1取余分布式策略概念3 1 2用php写一个取余分布式策略来分析实现原理3 1 3取余分布式算法的优缺点 3 1 1取余分布式策略概念 3 1 1取余分布式策略概念取余分布式算法是先求得key的整数hash值 再除以服务器台数 根据余数来选择连接哪一台服务器 把数据存储到该服务器上 3 1 2用php写一个取余分布式策略来分析实现原理 array host 192 168 1 2 port 11211 1 array host 192 168 1 3 port 11211 private mm publicfunctionset key this mm newMemcache mm con key hexdec substr md5 key 0 10 server mm con key count this mm config this mm connect this mm config server host this mm config server port echo server server host this mm config server host port this mm config server port var dump this mm getStats mm newmm mm set fsegsjkljklio mm set fse1gsjkljklio 3 1 3取余分布式算法的优缺点 有什么有缺点 3 1 3取余分布式算法的优缺点 有什么有缺点 优点 计算很简单 效率很高 缺点 如果增加或减少一台服务器的话 所有key都失效 负载一下子会很高 结论 大型memcache集群中很少人采用这种方式 php的memcache扩展的addServer函数也放弃了这种分布式策略 3 2一致性分布式策略 3 2 1一致性分布式策略概念3 2 2用php写一个一致性分布式策略来分析实现原理3 2 3一致性分布式算法的优缺点 3 2 1一致性分布式策略概念 3 2 1一致性分布式策略概念一致性hash的原理是算先算出memcache服务器的hash值 并将其分散到0 2的32次方的圆上 然后从数据映射到的位置开始顺时针查找 将数据保存到查找到的第一个服务器上 如果超过2的32次方依然没找到 将数据保存到第一台memcache服务器上 3 2 2用php写一个一致性分布式策略来分析实现原理 array host 192 168 1 2 port 11211 2 array host 192 168 1 3 port 11211 private max 0 圆圈的最大值private node max array 节点的最大值private mm publicfunctionset key this mm newMemcache 计算圆圈的最大值 this max hexdec FFFFF 计算各节点值 server num count this mm config node ceil this max server num for i 1 inode max i node i 计算当前key的值 mm con key hexdec substr md5 key 0 5 3 2 2用php写一个一致性分布式策略来分析实现原理 找到当前key的节点号foreach this node maxas key val if mm con keymm config server 1 this mm connect this mm config server host this mm config server port echo server server host this mm config server host port this mm config server port key mm con key var dump this mm getStats mm newmm mm set fsegsjkljklio mm set fse1gsjkljklio 3 2 3一致性分布式算法的优缺点 一致性分布式算法有什么优缺点 3 2 3一致性分布式算法的优缺点 一致性分布式算法有什么优缺点优点 添加新的服务器 只影响了少部分缓存的失效 现在大部分都采用这种方式来实现memcache分布式 考虑容灾和扩容时候最好使用一致性分布式算法 以确保在出现故障或容量问题时减少对数据库的影响 4 memcache高级应用案例 4 1memcache集群出现的一些问题与决解思路4 1 1避免key冲突问题2 1 2如何清理某项目某模块的缓存问题4 2用memcache做分页缓存4 3用memcache做top10实时排序 4 1memcache集群出现的一些问题与决解思路 4 1 1避免key冲突问题4 1 2如何清理某项目某模块的缓存问题备注 参考资料文件下的cache类 并从cache扩展到项目模块缓存的实现 4 2用memcache做分页缓存 参考我写的文章 4 3用memcache做top10实时排序 实现思路 我们把top10设置为一个数组变量存储到memcache中 下次各文章页面有用户访问的时候 统计该页面访问数量 并与top10的数组最小一个数字比较 如果比最小的数字大 替换最小的数字 然后从新排序该数组 写入memcache 5 memcache监控 5 1命中率监控 get hits cmd get 5 2内存使用量监控5 3带宽监控 6 memcache监控工具 6 1用memcache php监控6 2用cacti监控6 3用memAdmin监控 7 参考addServer思路写mysql分布式连接类实现mysql集群 7 1用iphash策略实现读写单例模式连接mysql 7 1用iphash策略实现读写单例模式连接mysql array host 192 168 1 2 port 3306 username test passwd 123456 dbname test charset UTF 8 2 array host 192 168 1 3 port 3306 username test passwd 123456 dbname test charset UTF 8 private slave config array 1 array host 192 168 1 4 port 3306 username test passwd 123456 dbname test charset UTF 8 2 array host 192 168 1 5 port 3306 username test passwd 123456 dbname test charset UTF 8 private max 0 圆圈的最大值private node max array 节点的最大值privatestatic master 主库的句柄 7 1用iphash策略实现读写单例模式连接mysql publicfunctionmaster 计算圆圈的最大值 this max pow 255 4 pow 255 3 pow 255 2 255 计算各节点值 server num count this master config node ceil this max server num for i 1 inode max i node i SERVER REMOTE ADDR 100 1 1 1 SERVER REMOTE ADDR 200 120 11 12 echo SERVER REMOTE ADDR 计算当前key的值 ip explode SERVER REMOTE ADDR master key ip 0 pow 255 3 ip 1 pow 255 2 ip 2 255 ip 3 找到当前key的节点号foreach this node maxas key val if master key val server key break 7 1用iphash策略实现读写单例模式连接mysql if isset server array key exists server this master config server 1 echo server server host thi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年学历类自考国际经济法概论-学前心理学参考题库含答案解析(5卷)
- 2025年内分泌学甲状腺功能亢进治疗操作考核答案及解析
- 2025年学历类自考国际私法-古代汉语参考题库含答案解析(5卷)
- 5.1 质量守恒定律(第二课时)说课稿-2023-2024学年九年级化学人教版上册
- 2025年肿瘤科肿瘤病理诊断综合评估答案及解析
- 8.3印度教学设计-七年级地理下学期人教版
- 2025年耳科常见听力障碍诊断与治疗模拟考试卷答案及解析
- 9 《说“木叶”》教学设计 2023-2024学年统编版高中语文必修下册
- 园林绿化养护施工组织设计方案
- 跨文化音乐教学对儿童认知发展的促进作用
- 九年级历史上册教材课后习题参考答案
- 公安当场处罚案件培训课件
- 肉毒中毒医学课件
- 血液透析的标准预防课件
- 畜牧业的畜禽疫病防控
- 抹灰工实操比赛方案
- 改写地球历史的25种石头
- 全科规培:门诊SOAP病历考核模拟文档
- 《冠心病科普》课件
- 《能源概论》课件
- 颂钵培训课件
评论
0/150
提交评论