转载:http://www.cnblogs.com/lovecindywang/archive/2010/05/19/1739025.html
Memcache的优势我觉得总结下来主要体现在:
1) 分布式。可以由10台拥有4G内存的机器,构成一个40G的内存池,如果觉得还不够大可以增加机器,这样一个大的内存池,完全可以把大部分热点业务数据保存进去,由内存来阻挡大部分对数据库读的请求,对数据库释放可观的压力。
2) 单点。如果Web服务器或App服务器做负载均衡的话,在各自内存中保存的缓存可能各不相同,如果数据需要同步的话,比较麻烦(各自自己过期,还是分发数据同步?),即使数据并不需要同步,用户也可能因为数据的不一致而产生用户体验上的不友好。
3) 性能强。不用怀疑和数据库相比确实是,根源上还是内存的读写和磁盘读写效率上几个数量级的差距。有的时候我们在抱怨数据库读写太差的情况下可以看看磁盘的IO,如果确实是瓶颈的话装啥强劲的数据库估计也档不了,强不强无非是这个数据库多少充分的利用了内存。
但是也不太建议在任何情况下使用Memcache替代任何缓存:
1)
如果Value特别大,不太适合。因为在默认编译下Memcache只支持1M的Value(Key的限制到不是最大的问题)。其实从实践的角度来说也不
建议把非常大的数据保存在Memcache中,因为有序列化反序列化的过程,别小看它消耗的CPU。说到这个就要提一下,我一直觉得Memcache适合
面向输出的内容缓存,而不是面向处理的数据缓存,也就是不太适合把大块数据放进去拿出来处理之后再放进去,而是适合拿出来就直接给输出了,或是拿出来不需
要处理直接用。
2)
如果不允许过期,不太适合。Memcache在默认情况下最大30天过期,而且在内存达到使用限制后它也会回收最少使用的数据。因此,如果我们要把它当作
static变量的话就要考虑到这个问题,必须有重新初始化数据的过程。其实应该这么想,既然是缓存就是拿到了存起来,如果没有必定有一个重新获取重新缓
存的过程,而不是想着它永远存在。
在使用Memcache的过程中当然也会有一些问题或者说最佳实践:
1)
清除部分数据的问题。Memcache只是一个Key/Value的池,一个公共汽车谁都可以上。我觉得对于类似的公共资源,如果用的人都按照自己的规则
来的话很容易出现问题。因此,最好在Key值的规范上上使用类似命名空间的概念,
每一个用户都能很明确的知道某一块功能的Key的范围,或者说前缀。带来的好处是我们如果需要清空的话可以根据这个规范找到我们自己的一批Key然后再去
清空,而不是清空所有的。当然有人是采用版本升级的概念,老的Key就让它过去吧,到时候自然会清空,这也是一种办法。不过Key有规范总是有好处的,在
统计上也方便一点。
2)
Value的组织问题。也就是说我们存的数据的粒度,比如要保存一个列表,是一个保存在一个键值还是统一保存为一个键值,这取决于业务。如果粒度很小的话
最好是在获取的时候能批量获取,在保存的时候也能批量保存。对于跨网络的调用次数越少越好,可以想一下,如果一个页面需要输出100行数据,每一个数据都
需要获取一次,一个页面进行上百次连接这个性能会不会成问题。
那么Memcache主要用在哪些功能上呢?
其实我觉得平时能想到在内存中做缓存的地方我们都可以考虑下是不是可以去适用分布式缓存,但是主要的用途还是用来在前端或中部挡一下读的需求来释放Web服务器App服务器以及DB的压力。
分享到:
相关推荐
4. **适用场景**:由于其丰富的数据结构和持久化功能,Redis常用于缓存、消息队列、计数器、社交网络、实时统计等多种场景,尤其在需要复杂数据操作和数据持久化的应用中更为适用。 **对比与选择** MemCache和...
- **广泛支持:** Memcache提供了多种编程语言的API接口,包括Java、C/C++/C#、Perl、Python、PHP、Ruby等,适用于大多数流行的语言。 - **非持久化存储:** Memcache中的数据存储在内存中,不支持数据的持久化存储...
- **优点**:简单、高效、快速,适用于简单key-value存储。 - **缺点**:无持久化机制,服务器重启后数据丢失;不支持复杂数据结构。 2. **Redis**: - **工作原理**:与Memcache类似,但Redis提供更丰富的数据...
我们将从性能、特性、适用场景等方面进行比较。 首先,Ehcache是一款基于Java的开源分布式缓存系统,它是Hibernate框架的默认缓存提供商,因此在Java社区中非常流行。Ehcache提供了磁盘存储、内存管理以及缓存过期...
综合以上,`php_apc`和`memcache`都是针对PHP的缓存解决方案,它们各自有其优缺点和适用场景。`cache.php`文件可能实现了这三种缓存方式的接口,允许开发者根据需求灵活选择使用哪种缓存策略。在实际项目中,可以...
Memcache和MongoDB是两种在IT行业中广泛使用的数据存储技术,它们各有特色,适用于不同的场景。Memcache是一种分布式内存缓存系统,主要用于缓解数据库的读取压力,提高Web服务的响应速度;而MongoDB是一款非关系型...
总的来说,使用PHP和Memcache实现消息队列是一种巧妙的方法,尤其适用于消息不太密集且对线程安全性要求不高的场景。然而,为了在高并发和多线程环境中保证系统的稳定性和可靠性,开发者需要考虑实现更复杂的同步...
标题中的“ehcache-memcache-redis 三大缓存男高音”指的是三种常见的高性能缓存系统:Ehcache、Memcached和Redis。这三种缓存技术在IT领域广泛应用于提高应用程序的性能,通过存储经常访问的数据来减少数据库查询,...
- **优点**:易于学习、跨平台性强、丰富的函数库支持。 - **版本选择**:推荐使用较新的稳定版本,如PHP 7.x系列,以获得更好的性能和安全特性。 4. **MySQL** - **数据库管理系统**:MySQL是最流行的关系型...
为了达成这一目标,可以采用Memcache作为session的存储方案。下面详细解析在PHP中使用Memcache存储session的三种配置方法。 首先,我们需要了解Memcache是什么。Memcache是一种开源的分布式内存对象缓存系统,它...
但需要注意的是,这种方法只适用于小型项目或对实时性要求高的场景,对于大型网站,可能需要更复杂的解决方案,如Redis或其他分布式缓存系统,以及更完善的用户会话管理机制,以应对高并发和用户登录状态的持久化...
适用场景是消费者和提供者数量相差不多,需要传输文件的场景。由于使用了Java标准序列化,存在安全漏洞,且性能上不如dubbo协议。 3. webservice协议:基于WebService的远程调用协议,使用CXF框架实现。适用于系统...
- **优点**:速度快,适用于缓存场景。 - **缺点**:功能相对单一。 #### 7. **Redis协议** - **特点**:基于Redis实现的RPC协议。 - **应用场景**:适用于需要高性能、高可用的数据存储服务调用。 - **优点**:...
- 应用场景:适用于大并发、小数据量的服务调用,尤其适合消费者数量远大于提供者的情况。 - 优点:单一长连接和 NIO 异步通讯,提高了效率和吞吐量。 - 缺点:可能不适合大数据传输。 2. **RMI(Remote Method ...
- **应用场景**:适用于需要处理大量并发请求的服务调用场景,特别是在消费者数量远超提供者的情况下,可以有效减少资源消耗。 - **优点**:高性能、低延迟。 - **缺点**:不适用于传输大数据量的场景。 #### 2. **...
17. 负载均衡的应用场景:适用于大型网站、电子商务平台、社交媒体平台等需要高可用性和高性能的应用场景。 18. 负载均衡的架构设计:需要考虑到服务器的数量、配置、网络带宽等因素,以实现高可用性和高性能的负载...
在总结面试题时,我们关注的是了解各种组件的原理、优点、缺点以及在不同场景下的适用性和解决方案。在实际面试中,这些知识点往往是考察应聘者对技术深度理解和问题解决能力的重要依据。通过上述内容的深入分析,...
- **memcache和redis协议**:基于memcached和redis实现的RPC协议,适用于缓存和数据存储场景。 **2. Dubbo超时时间的设置** Dubbo超时时间可以通过服务提供者和服务消费者两端设置。服务端设置更贴近服务特性,消费...
【描述】:本文将深入探讨三个广泛使用的缓存系统——Ehcache、Memcached 和 Redis,分析它们的特点、优缺点以及适用场景,帮助读者理解这三大“缓存男高音”的差异,并提供实践建议。 【标签】:互联网 【正文】...
这种协议的优点是性能好,适合于大量客户端与少量服务端的场景;缺点是只支持点对点通信。 2. rmi协议:基于JDK标准的远程方法调用协议实现,要求传递的参数和返回值必须实现Serializable接口。这种协议使用Java...