前言
应该是很久之前,我开始研究Memcache,写了一系列的学习心得,比如《Discuz!的Memcache缓存实现》等。后面的好几十条回复也让这篇文章成为了此博客中颇受关注的一员。

同时在百度和Google,关键词Memcache在长达一年多的时间里占据着第二位(第一位是官方),为很多需要了解或者应用Memcache的朋友提供了一些信息,但是我始终觉着还不够,于是本文诞生。

唠唠叨叨说了半天,如果你觉着前面啰嗦,请直接看最后一大段,那是本文的重点。

基础环境
其实基于PHP扩展的Memcache客户端实际上早已经实现,而且非常稳定。先解释一些名词,Memcache是danga.com的一个开源项目,可以类比于MySQL这样的服务,而PHP扩展的Memcache实际上是连接Memcache的方式。

首先,进行Memcache被安装具体可查看:
Linux下的Memcache安装:http://www.ccvita.com/257.html
Windows下的Memcache安装:http://www.ccvita.com/258.html;
其次,进行PHP扩展的安装,官方地址是http://pecl.php.net/package/memcache
最后,启动Memcache服务,比如这样

/usr/local/bin/memcached -d -p 11213 -u root -m 10 -c 1024 -t 8 -P /tmp/memcached.pid
/usr/local/bin/memcached -d -p 11214 -u root -m 10 -c 1024 -t 8 -P /tmp/memcached.pid
/usr/local/bin/memcached -d -p 11215 -u root -m 10 -c 1024 -t 8 -P /tmp/memcached.pid

启动三个只使用10M内存以方便测试。

分布式部署
PHP的PECL扩展中的memcache实际上在2.0.0的版本中就已经实现多服务器支持,现在都已经2.2.5了。请看如下代码

$memcache = new Memcache;
$memcache->addServer('localhost', 11213);
$memcache->addServer('localhost', 11214);
$memcache->addServer('localhost', 11215);
$memStats = $memcache->getExtendedStats();
print_r($memStats);

通过上例就已经实现Memcache的分布式部署,是不是非常简单。

分布式系统的良性运行
在Memcache的实际使用中,遇到的最严重的问题,就是在增减服务器的时候,会导致大范围的缓存丢失,从而可能会引导数据库的性能瓶颈,为了避免出现这种情况,请先看Consistent hashing算法,中文的介绍可以参考这里,通过存取时选定服务器算法的改变,来实现。

修改PHP的Memcache扩展memcache.c的源代码中的

"memcache.hash_strategy" = standard

"memcache.hash_strategy" = consistent

重新编译,这时候就是使用Consistent hashing算法来寻找服务器存取数据了。

有效测试数据表明,使用Consistent hashing可以极大的改善增删Memcache时缓存大范围丢失的情况。
NonConsistentHash: 92% of lookups changed after adding a target to the existing 10
NonConsistentHash: 90% of lookups changed after removing 1 of 10 targets
ConsistentHash: 6% of lookups changed after adding a target to the existing 10
ConsistentHash: 9% of lookups changed after removing 1 of 10 targets

Tag: 部署, Memcache, 分布式

kimi at 2009-04-29 21:19:00 in Memcache

版权声明:原创作品,欢迎转载,转载时请务必以超链接形式标明文章原始地址、作者信息和本声明。

<!-- entry -->

<!-- post -->

“Memcache分布式部署方案”

7条回复

  1. deeka at 2009-04-30 09:30:53 回复

    我觉得最好拿一台稳定的机子,在addServer之connect着

    <!-- comment-text -->

  2. Guest at 2009-06-01 15:44:40 回复

    Come on, boy! It should be “Memcached”….

    kimi at 6月 9th, 2009 at 09:46:33 回复

    @Guest, tks for reminding me

    <!-- comment-text -->

  3. 丹木秋风 at 2009-06-24 16:51:01 回复

    再看的时候又实际化了一些啊.

    <!-- comment-text -->

  4. small at 2009-07-14 14:18:53 回复

    最近在看 memcache的源码,不知道楼主可否写一些源码分析,或者分析一下memcache的实现原理

    <!-- comment-text -->

  5. 陈敏 at 2009-08-10 08:39:26 回复

    本来是搜索 memcached 搜到你网站的
    看见你 “媳妇” 标签也挺大的
    做了个友情链接
    下次找技术文章 就来你这里看看

    <!-- comment-text -->

  6. liaofuqian at 2009-08-11 10:20:48 回复

    多谢分享,很好很强大,学习。

Memcache分布式部署方案相关推荐

  1. Linux-Memcache分布式部署方案(magent代理解决单点故障)

    Memcached的特点 Memcached作为高速运行的分布式缓存服务器具有以下特点. 1. 协议简单:memcached的服务器客户端通信并不使用复杂的MXL等格式, 而是使用简单的基于文本的协议 ...

  2. Redis的分布式部署

    该文章从存储的分布式部署常用思路出发,介绍了水平拆分.主从复制这两种核心思路,并介绍了redis的实现,分别是 水平拆分的实现:sharding,将key通过crc16哈希到16384个slot里.s ...

  3. prometheus之分布式部署

    随着监控系统监控的指标越来越多,你会发现你的监控很杂乱,并且一个server去那么多机器上抽取数据或者被推送,想着都很累.又或者你是个老板,你不关心那些闲杂项,只想要个聚合结果.那么prometheu ...

  4. Zabbix监控和分布式部署实施方案

    最近在研究Zabbix监控,由于机房分布在多个城市,因此采用zabbix proxy做为监控方案,在每 个节点部署zabbix proxy,由zabbix proxy收集agentd数据,然后将采集到 ...

  5. 业务模块化打造单体和分布式部署同步支持方案

    我在2019年中国.NET开发者峰会上为大家分享了我们的微服务电商安全工程实践,那次会议分享的高清录播已经上传到我的腾讯课堂,大家可以通过底部的小程序打开直接观看(复习). 在大会上跟大家提到,我们当 ...

  6. 分布式部署_业务模块化打造单体和分布式部署同步支持方案

    我在2019年中国.NET开发者峰会上为大家分享了我们的微服务电商安全工程实践,那次会议分享的高清录播已经上传到我的腾讯课堂,大家可以通过底部的小程序打开直接观看(复习). 在大会上跟大家提到,我们当 ...

  7. 私有云办公平台大规模集群/企业级集群/小型工作室集群解决方案:NextCloud集群部署方案--NextCloud集群架构设计

    原作者:NextCloud文档库 转载来源:https://docs.nextcloud.com/server/11/admin_manual/installation/deployment_reco ...

  8. 第02课:主流分布式缓存方案的解读及比较

    分布式缓存一般被定义为一个数据集合,它将数据分布(或分区)于任意数目的集群节点上.集群中的一个具体节点负责缓存中的一部分数据,整体对外提供统一的访问接口.分布式缓存一般基于冗余备份机制实现数据高可用, ...

  9. ActiveMQ实现负载均衡+高可用部署方案

    2019独角兽企业重金招聘Python工程师标准>>> 一.架构和技术介绍 1.简介 ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线.完全支持JMS1.1和J ...

最新文章

  1. Linux下SSH命令使用方法详解
  2. 物联网安全威胁及应对措施
  3. 常用Git命令清单。
  4. Redis随笔Jedis、jedisCluster的使用
  5. java 控制 crt_secureCRT关闭连接自动关闭tomcat服务
  6. 总结面试题——Javascript
  7. [转]linux signal
  8. pod镜像拉取策略、重启容器策略
  9. 数据结构与算法笔记——用Go语言描述
  10. Epic下载速度慢 Epic下载不稳定怎么办【解决办法】
  11. 关于unity3d多点触控的研究
  12. bzoj2144 跳跳棋
  13. Nolan的分形分布估计软件Stable使用教程
  14. android studio拨打电话代码,AndroidStudio实现拨打电话和发短信(kotlin)
  15. 江南爱窗帘十大品牌 窗帘发展状况怎么样
  16. .net core 3.1JWT用户权限认证(二)获取token
  17. 机器学习(四):w·x+b模型(1)
  18. properties文件
  19. 【SpringBoot整合缓存】-----spring-boot-starter-cache篇
  20. 漫画:什么是服务熔断

热门文章

  1. 求排列的逆序数(信息学奥赛一本通-T1237)
  2. cassandra可视化工具_耗时1个月整理!160种Python标准库、第三方库和外部工具都有了...
  3. python安装界面翻译_Python新手教程:40行python代码写一个桌面翻译器
  4. unix入门经典_程序员大神们的经典编程语录
  5. k8s配置以使得pod可以运行于master上
  6. linux内核那些事之E820
  7. transformer中patch与token?
  8. Xshell安装sql报错:······ RSA sha1 ((MD5) PGP) md5 NOT OK (MISSING KEYS: (MD5) PGP#3a79bd29)
  9. 关于vue中Cannot read property 'length' of undefined 导致:数据不显示问题【自己经验参考】
  10. element-ui省市区三级联动:选择即改变