我知道这是一个非常模糊的问题,但我正在寻找一个非常抽象的答案。自从我几个月前开始使用GAE以来,我一直对memcache不屑一顾,认为它没有用,是一个不必要的麻烦,它真的不是那么重要。但似乎memcache被称赞为一个非常有益的功能,Google甚至说“高性能可伸缩web应用程序经常在某些任务中使用分布式内存中的数据缓存,或者代替健壮的持久存储。”所以我认为这方面一定有值得研究的地方。
我就是不明白。它对性能有什么好处?首先,您必须检查memcache中是否有内容,如果没有,则进行查询。我一直认为不需要处理这个问题会更快,而且不管怎样,只要查询就行了,但这似乎是一种天真的方法?这会有多大的不同?
我想我一直不明白的是memcache在哪里有用。我可以看到它在Stackoverflow主页中是如何有用的,在Stackoverflow主页中,所有用户看到的几乎都是相同的东西,所以在这种情况下不使用memcache是很有用的,实际上是愚蠢的。但是,比如说像Facebook这样的社交网络。每个用户都会看到不同的东西。不会有两个人看到相同的数据和内容,而且变化如此之快,以至于memcache可能需要不断更新。memcache在这样的场景中可以扮演什么角色?
此外,在像社交网络这样的私人网站中,如果每个用户都必须在memcache中存储不同的信息,那么memcache能真正适应多少呢?我知道GAE没有提到它的memcache的大小,所以存储数十万条记录安全吗?
发布于 2012-10-25 12:04:00
您可以将memcache用于可能经常需要的内容。检查memcache中是否有内容的速度很快。从memcache中获取它的速度很快。如果你可以省去查询,你就节省了大量的时间。
例如,考虑以下两个场景:
从memcache中获取(或存储)内容的大概时间约为2-3ms。从数据库获取东西的大概时间是100ms。
因此,对于第一个场景,您总共有100ms的x2 = 200ms。
在第二个场景中,您有3ms (查找失败)+ 100ms (查询)+ 3ms (存储)+ 3ms (成功查找)= 109ms。
你总共节省了将近50%的费用。
现在假设有10个人在访问你的主页。在第一个场景中,每个额外的人将是另外的100ms。第二个场景中的每个人只有3毫秒。
还要注意,您不必一次在memcache中存储整个页面。您也可以存储页面的某些部分。当然,并不是所有的用户都有相同的数据,但肯定有一些东西是他们之间共享的。
发布于 2012-10-26 14:24:28
大小
不能依赖于memcache的大小。已经有各种各样的尝试来计算每个应用程序有多少数据,结果各不相同。
可靠性
这是不可靠的。您的memcache条目的生存期与一组黑盒(对用户)值有关,例如,它们被请求的频率以及距离上次请求已有多长时间。
Google将尝试保留常用条目,并随机(从您的角度)将它们从memcache中删除。
提示
尝试在所有人共享的项目上使用它,或者经常请求,或者计算成本很高。很好的例子是用户实体,因为只有一个用户被加载,他们可能会与你的应用程序交互不止一次。另一个可能是一个模板,您可以在其中放置特定于用户的数据,或者如果只有一小部分数据发生更改,则可以放入整个页面。对于Facebook来说,它可能是完整的模板,比如“这些朋友正在聊天”,公司范围的部分,比如“你可能想试试这个游戏”,或者是一个新的帖子,将被推送给许多当前在线的朋友。
对每种类型的实体使用不同的缓存期。提示App Engine,通过设置一个实体的到期日期比另一个短,这些实体最有用的保留时间更长。缓存的页面可能只在30秒内有用,用户条目可能在一个小时内有用。
这是一个有限的资源,谷歌将对多个客户/应用程序进行优化,以造福于所有客户。如果你的应用程序没有命中,而另一个应用程序需要更多的memcache,那么谷歌驱逐你的memcached条目将是合理的。
https://stackoverflow.com/questions/13061371
复制相似问题