我正在尝试理解像memcached这样的解决方案有什么需要。这看起来可能是一个愚蠢的问题--但是如果我所需要的只是缓存对象-wont一个简单的hashmap,那么它会带来什么呢?
发布于 2011-02-06 04:07:10
引用memcache web site的话说,memcache是…
免费&开源,高性能,分布式内存对象缓存系统,本质上是通用的,但旨在通过减轻数据库负载来加速动态web应用程序。
Memcached是内存中的键值存储,用于存储数据库调用、API调用或页面呈现的结果中的小块任意数据(字符串、对象)。Memcached简单但功能强大。它的简单设计促进了快速部署,易于开发,并解决了大型数据缓存面临的许多问题。它的API可用于大多数流行语言。
本质上,它是一个简单的键/值存储
这里的一个关键词是distributed。一般来说,再次引用memcache站点的话,
Memcached服务器通常不知道彼此。没有串扰,没有同步,没有广播。缺乏互联意味着添加更多的服务器通常会像您预期的那样增加更多的容量。这条规则可能有例外,但它们都是例外,并得到了仔细的考虑。
我强烈推荐阅读detailed description of memcache。
发布于 2011-02-06 03:34:41
您将把这个hashmap放在哪里?这就是它为你做的事情。在PHP上实现的任何结构都只存在于请求结束之前。如果您将内容放入永久缓存中,则可以将其取回以供其他请求使用,而不是重新构建数据。
发布于 2011-12-07 23:14:45
我知道这个问题有点老了,但是除了能够在多个服务器上共享一个缓存之外,还有一个在其他答案中没有提到的方面,那就是值过期。
如果将值存储在HashMap中,并且该HashMap绑定到应用程序上下文,则它的大小将不断增长,除非您以某种方式使项过期。Memcached延迟过期对象以获得最高性能。
当一个项目被添加到memcache中时,它可以有一个过期时间,例如600秒。在对象过期后,它将保留在那里,但如果另一个对象请求它,它将清除它并返回null。
类似地,当memcached内存已满时,它将查找第一个足够大小的过期项,并将其过期,以便为新项腾出空间。最后,也可能发生缓存已满并且没有任何项要过期的情况,在这种情况下,它将替换最少使用的项。
https://stackoverflow.com/questions/4909147
复制相似问题