`

Memcache分布式部署方案

阅读更多

前言
应该是很久之前,我开始研究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 =newMemcache;
$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

Tags: Memcache分布式部署


已有 16 条评论 »

  1. deekadeeka

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

  2. GuestGuest

    Come on, boy! It should be "Memcached"....

    1. kimikimi

      @Guest, tks for reminding me

  3. 丹木秋风丹木秋风

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

  4. smallsmall

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

  5. 陈敏陈敏

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

  6. liaofuqianliaofuqian

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

  7. nearnear

    到此一游,留名。学习了。

  8. CrazyTomCrazyTom

    请问一下,memcache 有没有容灾处理啊,如何分组部署

  9. chinaphp.comchinaphp.com

    其实没必要修改源码在编译,直接修改 PHP.INI 的配置文件就可以实现consistent算法。当然如果只有一台 ,那算法也无所谓了。

  10. MusikarMusikar

    看了你很多文章 也来凑个热闹

  11. dawndawn

    大哥,麻烦会回小学在学下语文,要不,就别写博文了。语文都没学好,自己看看你写的鸟文,逻辑混乱。

  12. darthvader7darthvader7

    产品内同时引入ehcache和memcache,并要求可替换,觉得有点怪,感觉这两个就不是以个级别的,但还是要做。
    ehcache有缓存块,可以flush一个块,这样不同模块的缓存互不影响,场景如:
    spring+ehcache配置接口的缓存,现在缓存了一个接口其结果是一个列表,modify了其中一个对象,则应更新列表的返回结果,此时我们使用了flush
    对应的场景在memcache中,首先我感性的人为在new client时这个poolname和缓存块类似,但测试时(windows上的memcahced服务)发现同一个服务内不同的poolname并没有划分出缓存块来,这个poolname是干嘛的??
    现在如果想在memcache上实现不同模块相对独立的缓存,是否只能以不同的poolname对应不同的服务来准备出一群client??

  13. nanquannanquan

    很多错误啊... 楼主很长时间没有更新文章了.....
    就像你说的, 你的文章确实在搜memcached时候比较靠前, 所以楼主更要负起责任来呐>>

    比如: 启动时, 要指定不同的pid文件吧, 要不然前面的pid就没有了...
    -P /tmp/memcached.pid

  14. jimmyjimmy

    ini_set('memcache.hash_strategy', 'consistent');

    实际使用中可以这样手动调节

    1. sevenseven

      加在配置文件里面嘛

     

     

    原文转子:http://www.ccvita.com/395.html

分享到:
评论

相关推荐

    PHP扩展Memcache分布式部署方案

    【PHP扩展Memcache分布式部署方案】是针对使用PHP与Memcache进行高效缓存管理的一种技术实践。Memcache是由danga.com开发的开源项目,它提供了一个高性能、分布式内存对象缓存系统,常用于减轻数据库负载,提高Web...

    memcache分布式缓存的使用

    **分布式缓存与Memcache简介** 分布式缓存是一种在分布式系统中存储数据的机制,它通过将数据分散...通过合理的分布式部署和策略调整,Memcache能在大规模数据访问中发挥重要作用,降低数据库负载,提高用户响应速度。

    memcache缓存分布式集群

    7. **部署与配置**:搭建Memcache分布式集群需要配置Magent,包括设置节点列表、选择合适的哈希策略、调整负载均衡参数等。这涉及到网络配置、端口映射以及监控和故障排查等方面的知识。 8. **性能优化**:优化包括...

    memcache分布式的对象缓存系统

    在分布式环境中,Memcache可以部署在多台服务器上,通过一致性哈希算法实现数据的分布式存储和负载均衡,进一步提升系统的可扩展性和容错性。此外,Memcache还支持LRU(Least Recently Used)策略,当内存不足时,会...

    Windows下的Memcache安装.doc

    ### Windows下的Memcache安装知识点详解 ...- [Memcache分布式部署方案](http://www.ccvita.com/395.html) 以上步骤和信息旨在帮助开发者顺利地在Windows环境中安装和配置Memcache,以便于后续的应用开发和性能优化。

    window-php7.1-memcache-dll

    5. **分布式缓存**:当单个Memcache服务器不足以应对高并发或大数据量时,可以采用分布式部署,通过多个Memcache实例分担负载,确保系统的稳定性和可扩展性。 压缩包内的"php-7.1.x_memcache.dll"是核心文件,它是...

    asp memcache 解决缓存问题

    6. **优化性能**:为了最大化性能,可以考虑分布式部署 Memcached,即将多个 Memcached 实例分布在多台服务器上,通过一致性哈希算法分发数据,提高并发处理能力。 7. **监控与维护**:定期检查 Memcache 的性能和...

    5.1 Memcache部署和使用-带书签-201809301

    【5.1 Memcache部署和使用】 Memcache是一款开源、高性能、分布式的内存对象缓存系统,主要用于减轻数据库压力,提升动态Web应用的速度和可扩展性...在实际操作中,需要根据业务需求选择合适的部署方案和客户端配置。

    java版memcache缓存管理与开发

    对于大型网站而言,单一Memcache服务器的内存容量有限,因此采用分布式部署成为必然选择。可以通过对键(Key)进行有规律的设计,实现数据的有效分布。例如,在以用户为中心的网站中,可以按照用户ID的前缀来决定...

    memcache监控工具

    - **云服务**:如AWS CloudWatch、Azure Monitor等,为云上部署的Memcache提供集成的监控解决方案。 3. **具体工具介绍** - **mcmon**:一个简单的命令行工具,提供实时查看Memcached服务器的状态,如命中率、...

    php_memcache.dll 5.4.12

    Memcache作为一款流行的分布式内存对象缓存系统,常被用于存储和检索数据,以减少数据库访问压力。本文将围绕标题中的“php_memcache.dll 5.4.12”这一特定版本,深入探讨其在PHP环境中的应用及安装方法。 首先,`...

    Memcache 1.2.6 for Windows

    **Memcache 1.2.6 for ...总的来说,Memcache 1.2.6 for Windows为Windows环境提供了一个强大而可靠的缓存解决方案,通过合理使用和优化,可以显著提升Web应用的性能。无论是个人博客还是大型企业应用,都能从中受益。

    服务器缓存服务memcache

    - **分布式**:Memcache支持多客户端并发访问,可以部署在多台服务器上,实现分布式缓存,有效缓解单个服务器的压力。 - **简单易用**:Memcache使用TCP协议,API简洁,支持多种编程语言,如PHP、Python、Java、...

    memcache-2.2.6.tgz

    Memcache 是一个高性能的分布式内存对象缓存系统,它广泛应用于..."memcache-2.2.6.tgz"压缩包提供了该版本的源代码,允许开发者自定义编译和部署。理解Memcache的工作原理和使用方法,对于优化Web应用性能至关重要。

    PHP实现多服务器session共享之memcache共享.rar

    PHP的memcache扩展提供了一个解决方案,它是一个高性能的分布式内存对象缓存系统,常被用来作为session存储后端。通过配置php.ini文件,可以将session的存储机制从默认的文件系统改为memcache服务器集群。 具体实现...

    大规模分布式应用

    综上所述,面对大规模分布式应用,我们需要综合运用各种技术手段,如缓存、静态化、数据库优化、分布式部署、服务分离等,以应对海量数据和高并发挑战。同时,理解业务需求和用户行为,选择合适的技术栈和策略,才能...

    Memcache集群环境下缓存解决方案.docx

    在高可用和负载均衡的场景下,部署Memcache集群是必要的。这通常涉及多个节点的分布式存储,通过一致性哈希算法来分发数据,确保在节点间的添加或移除时,数据分布的影响最小。此外,还可以利用主从复制、多级缓存等...

    集群环境下memcache解决session共享

    总结来说,"集群环境下memcache解决session共享"是一个针对分布式系统中session管理的有效解决方案。通过使用memcache作为session的中央存储,可以在Tomcat8集群中实现用户状态的无缝切换,提升应用的稳定性和用户...

    memcache使用

    Memcache是一款高性能的分布式内存对象缓存系统,主要用于减轻数据库的负载,通过将数据存储在内存中来快速响应读取请求。本文主要针对Windows环境下的Memcache安装与配置进行详述。 **一、安装Memcache** 在...

Global site tag (gtag.js) - Google Analytics