【问题标题】:How can memcache be used in a social network context?memcache 如何在社交网络环境中使用?
【发布时间】:2012-10-15 05:03:20
【问题描述】:

我知道这是一个非常模糊的问题,但我正在寻找一个非常抽象的答案。自从几个月前我开始使用 GAE 以来,我一直认为 memcache 没有用,而且会带来不必要的麻烦,因为它真的没那么重要。但似乎 memcache 被称赞为一个非常有益的功能,谷歌甚至说“高性能可扩展的 Web 应用程序通常使用分布式内存数据缓存来代替强大的持久存储来完成某些任务。”等等我认为这一定有一些值得研究的地方。

我只是不明白。它对性能有什么好处?首先你必须检查内存缓存中是否有东西,如果没有,查询。我一直认为不必处理它会更快,无论如何都可以查询,但这似乎是一种幼稚的方法?这有多大的不同?

我想我一直不明白 memcache 的用处。我可以看到它在 Stackoverflow 主页上的用处,所有用户几乎都看到相同的东西,所以它会很有用,实际上在这种情况下不使用 memcache 是愚蠢的。但是说像Facebook这样的社交网络。每个用户都会看到不同的东西。没有两个人看到相同的数据和内容,而且事情变化如此之快,以至于 memcache 可能需要不断地更新。在这样的场景下,memcache 能起到什么作用?

另外,在像社交网络这样的私人网站中,如果每个用户都必须在 memcache 中存储不同的信息,那么 memcache 到底能适应多少?我知道 GAE 没有提到它的内存缓存的大小,那么存储数十万条记录是否安全?

【问题讨论】:

  • "memcache" = 内存缓存。内存访问可以比查询数据库快几个数量级,数据库的数据可能在磁盘上。缓存本质上会获取最常访问的对象。
  • 我推荐你在谷歌上使用这个词“memcached at facebook”你会发现很多很好的信息。

标签: google-app-engine webserver memcached


【解决方案1】:

尺寸

你不能依赖内存缓存的大小。为了弄清楚每个应用程序有多少数据,人们进行了各种尝试,结果各不相同。

可靠性

这不可靠。您的 memcache 条目的生命周期与一组黑盒(对用户)值相关,例如请求它们的频率以及自上次请求以来已经过去了多长时间。

Google 将尝试保留经常使用的条目,并将随机(从您的角度)从内存缓存中删除它们。

提示

尝试将其用于所有人共享、经常请求或计算费用昂贵的项目。很好的例子是用户实体,因为只有一个用户被加载,他们可能会多次与你的应用交互。另一个可能是您在其中放置用户特定数据的模板,或者如果只有一小部分会更改,则可以是整个页面。对于 Facebook,它可能是整个模板、诸如“这些朋友正在聊天”之类的部分、诸如“您可能想试试这个游戏”之类的公司范围的部分,或者将推送给许多当前在线朋友的新帖子。

对每种类型的实体使用不同的缓存期。通过将一个实体的到期日期设置为比另一个更短,提示 App Engine 最有用的是保留更长时间。一个缓存的页面可能只有用 30 秒,一个用户条目可能有用一个小时。

这是一种有限的资源,Google 将针对多个客户/应用程序进行优化,以造福所有客户。如果您的应用没有受到攻击,而另一个应用需要更多的内存缓存,那么 Google 会合理地弹出您的内存缓存条目。

【讨论】:

    【解决方案2】:

    您将 memcache 用于您可能经常需要的东西。检查内存缓存中是否有东西是快速。从内存缓存中获取它是快速。如果您可以省去自己进行查询的工作,那么您就可以节省大量时间。

    例如,考虑以下两种情况:

    • 两个人请求您的主页。作为页面加载的一部分,这两个请求都会执行查询。
    • 两个人请求您的主页。两者都检查缓存;一个执行查询并存储它,另一个获取缓存的结果。

    从内存缓存中获取(或存储)内容的时间大约为 2-3 毫秒。从数据库中获取信息的大概时间是 100 毫秒。

    所以对于第一种情况,您总共有 100 毫秒 x2 = 200 毫秒。

    在第二种情况下,您有 3 毫秒(查找失败)+ 100 毫秒(查询)+ 3 毫秒(存储)+ 3 毫秒(成功查找)= 总共 109 毫秒。

    您总共节省了近 50%。

    现在考虑可能有 10 个人请求您的主页。在第一种情况下,每增加一个人将是另外 100 毫秒。第二种情况每个人只有3ms。


    另外请注意,您不必一次将整个页面存储在内存缓存中。您也可以存储页面的部分。当然,并非所有用户都拥有所有相同的数据,但他们之间肯定有一些东西是共享的。

    【讨论】:

    • 我知道没有具体的数字,但大致估计,内存缓存有多大,或者它通常有多大?像 1 MB?还是100mb?千兆字节? (适用于 GAE)。
    • 嗯..我只是很难得到一个心理画面。什么是至少正确的测量单位?出于某种原因,我将它与标准的个人计算机硬盘缓存进行比较,我总是看到它是 2mb 或 8mb。我们在这里谈论的是相同的吗?
    • 单个内存缓存值限制为 1mb 每个。内存缓存中可以有很多值。
    • @mohabitar memcache 驻留在现在千兆字节大的 RAM 中,您所指的 2mb 或 8mb 缓存在 cpu 上。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-10
    • 1970-01-01
    • 1970-01-01
    • 2014-12-10
    • 2011-05-15
    相关资源
    最近更新 更多